求救!!!汇编语言绘制三角形代码错误,请大侠指正
时间:2011-06-27
来源:互联网
hah macro
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
endm
.model small
.386
.data
x1 db ?
y1 db ?
x2 db ?
y2 db ?
x3 db ?
y3 db ?
msg0 db 'pleasa input the location of X1:$'
msg1 db 'pleasa input the location of Y1:$'
msg2 db 'pleasa input the location of X2:$'
msg3 db 'pleasa input the location of Y2:$'
msg4 db 'pleasa input the location of X3:$'
msg5 db 'pleasa input the location of Y3:$'
msg6 db 'do you want to quit?(y/n)$'
err2 db 'enter location that must be less than 181$'
err1 db 'please input again:$'
deltax db 50 dup(?)
deltay db 50 dup(?);此处输入堆栈段代码
.code
start:
MOV AX,@data
MOV DS,AX
mov ss,ax
xor ax,ax
call hong
lea dx,msg6
mov ah,01h
int 21h
cmp al,'y'
jz exit
exit: mov ah,00
int 21h
hong proc near
; set video mode
mov ax, 3 ; text mode 80x25, 16 colors, 8 pages (ah=0, al=3)
int 10h ; do it!
h1:
lea dx,msg0
mov ah,9
int 21h
mov cx,0
mov si,0
inputx1:
; get char from keyboard into al
mov AH, 00h
int 16h
; print it:
mov AH, 0Eh
int 10h
mov ah,0
push ax
inc cx
cmp al,0dh
jz d
cmp al,30h
jb less
cmp al,39h
ja larger
jbe ente
less: hah
lea dx,err1
mov ah,9
int 21h
hah
jmp h1
larger: hah
lea dx,err1
lea dx,err1
mov ah,9
int 21h
hah
jmp h1
ente:
cmp al,0dh
jne inputx1
cmp cx,2
je dwx11
cmp cx,3
je dwx12
cmp cx,4
je dwx13
ja error
dwx11:
pop bx
pop bx
sub bx,30h
jmp xx
dwx12:
mov bx,0
pop ax
pop bx
sub bx,30h
pop ax
sub ax,30h
mov cl,10
mul cl
add bx,ax
jmp xx
dwx13:
pop ax
mov bx,0
pop bx
sub bx,30h
mov ax,0
pop ax
sub ax,30h
mov cl,10
mul cl
add bx,ax
mov ax,0
pop ax
sub ax,30h
mov cl,100
mul cl
add bx,ax
cmp bx,180
ja error
jmp xx
dx1:
cmp bl,180
ja error
mov x1,bl
jmp inputy1
dy1:
mov y1,bl
jmp inputx2
dx2:
cmp bl,180
ja error
mov x2,bl
jmp inputy2
dy2:
mov y2,bl
jmp inputx3
dx3:
cmp bl,180
ja error
mov x3,bl
jmp inputy3
dy3:
mov y3,bl
jmp code2
inputy1:hah
lea dx,msg1
mov ah,9
int 21h
mov cx,0
jmp inputx1
inputx2:hah
lea dx,msg2
mov ah,9
int 21h
mov cx,0
jmp inputx1
inputy2:hah
lea dx,msg3
mov ah,9
int 21h
mov cx,0
jmp inputx1
inputx3:hah
lea dx,msg4
mov ah,9
int 21h
mov cx,0
jmp inputx1
inputy3:hah
lea dx,msg5
mov ah,9
int 21h
mov cx,0
jmp inputx1
xx:
cmp si,1
je dx1
cmp si,2
je dy1
cmp si,3
je dx2
cmp si,4
je dy2
cmp si,5
je dx3
cmp si,6
je dy3
ja error
jmp code2
error:
mov dx,offset err2
mov ah,9
int 21h
hah
jmp h1
d: inc si
jmp ente
; set video mode 13h - 320x200
code2: mov ax,0
mov bx,0
mov cx,0
mov dx,0
mov si,0
mov di,0
mov ax,0700h
mov ds,ax
mov ah, 0
mov al, 12h
int 10h
; solute the deltax
mov ax,0
mov al,x1
sub al,x2
mov si,offset deltax
mov [si],al
;if deltax = 0,jump to draw a straight line
cmp al,0
je straightline1
; solute the deltay
mov bx,0
mov bl,y1
sub bl,y2
mov di,offset deltay
mov [di],bl
cmp al,bl
jae way11
jb way12
way11: ;if deltay<deltax,then y=(y1-y2)*(x-x2)/(x1-x2)+y2
; if x1>y1,draw the first line:
pop ax ;clear stack
mov ax,0 ;clear ax
mov cl, x1 ; row
mov dl, y1 ; column
call dlm ;call draw line mode
cmp cl, x2
jae u11
jb u12
line11:
mov bx,cx
sub bl,x2
mov al,bl
imul byte ptr [di]
idiv byte ptr [si]
add al,y2
mov dl,al
call dlm ;call draw line mode
cmp cl,x2
jbe u12
u11: dec cx
cmp cl,x2
jae line11
jb line20
u12: inc cx
cmp cl,x2
jbe line11
ja line20
; if x1<y1,draw the first line:
way12: ;if deltay>deltax,then x=(x1-x2)*(y-y2)/(y1-y2)+x2
pop ax ;clear stack
mov ax,0 ;clear ax
mov cl, x1 ;column
mov dl, y1 ;row
call dlm ;call draw line mode
cmp dl, y2
jae v11
jb v12
line12: mov ax,0
mov bx,dx
sub bl,y2
mov al,bl
imul byte ptr [si]
idiv byte ptr [di]
add al,x2
mov cl,al
call dlm ;call draw line mode
cmp dl,y2
jbe v12
v11: dec dx
cmp dl,y2
jae line12
jb line20
v12:
inc dx
cmp dl,y2
jbe line12
ja line20
straightline1:
mov ax,0
mov al,y1
cmp al,y2
jae sl11
jb sl12
sl11: mov dl, y1 ;draw straight line
x11: call dlm ;call draw line mode
mov cl, x1
dec dx
cmp dl, y2
jae x11
jmp line20
sl12: mov dl, y1
x12: call dlm ;call draw line mode
mov cl, x1
inc dx
cmp dl, y2
jbe x12
jmp line20
line20: mov al,x3
xchg al,x2
mov al,y3
xchg al,y2
jmp code2
hong endp
dlm proc near
mov al, 15 ; white
mov ah, 0ch ; put pixel
int 10h
ret
dlm endp
end start
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
endm
.model small
.386
.data
x1 db ?
y1 db ?
x2 db ?
y2 db ?
x3 db ?
y3 db ?
msg0 db 'pleasa input the location of X1:$'
msg1 db 'pleasa input the location of Y1:$'
msg2 db 'pleasa input the location of X2:$'
msg3 db 'pleasa input the location of Y2:$'
msg4 db 'pleasa input the location of X3:$'
msg5 db 'pleasa input the location of Y3:$'
msg6 db 'do you want to quit?(y/n)$'
err2 db 'enter location that must be less than 181$'
err1 db 'please input again:$'
deltax db 50 dup(?)
deltay db 50 dup(?);此处输入堆栈段代码
.code
start:
MOV AX,@data
MOV DS,AX
mov ss,ax
xor ax,ax
call hong
lea dx,msg6
mov ah,01h
int 21h
cmp al,'y'
jz exit
exit: mov ah,00
int 21h
hong proc near
; set video mode
mov ax, 3 ; text mode 80x25, 16 colors, 8 pages (ah=0, al=3)
int 10h ; do it!
h1:
lea dx,msg0
mov ah,9
int 21h
mov cx,0
mov si,0
inputx1:
; get char from keyboard into al
mov AH, 00h
int 16h
; print it:
mov AH, 0Eh
int 10h
mov ah,0
push ax
inc cx
cmp al,0dh
jz d
cmp al,30h
jb less
cmp al,39h
ja larger
jbe ente
less: hah
lea dx,err1
mov ah,9
int 21h
hah
jmp h1
larger: hah
lea dx,err1
lea dx,err1
mov ah,9
int 21h
hah
jmp h1
ente:
cmp al,0dh
jne inputx1
cmp cx,2
je dwx11
cmp cx,3
je dwx12
cmp cx,4
je dwx13
ja error
dwx11:
pop bx
pop bx
sub bx,30h
jmp xx
dwx12:
mov bx,0
pop ax
pop bx
sub bx,30h
pop ax
sub ax,30h
mov cl,10
mul cl
add bx,ax
jmp xx
dwx13:
pop ax
mov bx,0
pop bx
sub bx,30h
mov ax,0
pop ax
sub ax,30h
mov cl,10
mul cl
add bx,ax
mov ax,0
pop ax
sub ax,30h
mov cl,100
mul cl
add bx,ax
cmp bx,180
ja error
jmp xx
dx1:
cmp bl,180
ja error
mov x1,bl
jmp inputy1
dy1:
mov y1,bl
jmp inputx2
dx2:
cmp bl,180
ja error
mov x2,bl
jmp inputy2
dy2:
mov y2,bl
jmp inputx3
dx3:
cmp bl,180
ja error
mov x3,bl
jmp inputy3
dy3:
mov y3,bl
jmp code2
inputy1:hah
lea dx,msg1
mov ah,9
int 21h
mov cx,0
jmp inputx1
inputx2:hah
lea dx,msg2
mov ah,9
int 21h
mov cx,0
jmp inputx1
inputy2:hah
lea dx,msg3
mov ah,9
int 21h
mov cx,0
jmp inputx1
inputx3:hah
lea dx,msg4
mov ah,9
int 21h
mov cx,0
jmp inputx1
inputy3:hah
lea dx,msg5
mov ah,9
int 21h
mov cx,0
jmp inputx1
xx:
cmp si,1
je dx1
cmp si,2
je dy1
cmp si,3
je dx2
cmp si,4
je dy2
cmp si,5
je dx3
cmp si,6
je dy3
ja error
jmp code2
error:
mov dx,offset err2
mov ah,9
int 21h
hah
jmp h1
d: inc si
jmp ente
; set video mode 13h - 320x200
code2: mov ax,0
mov bx,0
mov cx,0
mov dx,0
mov si,0
mov di,0
mov ax,0700h
mov ds,ax
mov ah, 0
mov al, 12h
int 10h
; solute the deltax
mov ax,0
mov al,x1
sub al,x2
mov si,offset deltax
mov [si],al
;if deltax = 0,jump to draw a straight line
cmp al,0
je straightline1
; solute the deltay
mov bx,0
mov bl,y1
sub bl,y2
mov di,offset deltay
mov [di],bl
cmp al,bl
jae way11
jb way12
way11: ;if deltay<deltax,then y=(y1-y2)*(x-x2)/(x1-x2)+y2
; if x1>y1,draw the first line:
pop ax ;clear stack
mov ax,0 ;clear ax
mov cl, x1 ; row
mov dl, y1 ; column
call dlm ;call draw line mode
cmp cl, x2
jae u11
jb u12
line11:
mov bx,cx
sub bl,x2
mov al,bl
imul byte ptr [di]
idiv byte ptr [si]
add al,y2
mov dl,al
call dlm ;call draw line mode
cmp cl,x2
jbe u12
u11: dec cx
cmp cl,x2
jae line11
jb line20
u12: inc cx
cmp cl,x2
jbe line11
ja line20
; if x1<y1,draw the first line:
way12: ;if deltay>deltax,then x=(x1-x2)*(y-y2)/(y1-y2)+x2
pop ax ;clear stack
mov ax,0 ;clear ax
mov cl, x1 ;column
mov dl, y1 ;row
call dlm ;call draw line mode
cmp dl, y2
jae v11
jb v12
line12: mov ax,0
mov bx,dx
sub bl,y2
mov al,bl
imul byte ptr [si]
idiv byte ptr [di]
add al,x2
mov cl,al
call dlm ;call draw line mode
cmp dl,y2
jbe v12
v11: dec dx
cmp dl,y2
jae line12
jb line20
v12:
inc dx
cmp dl,y2
jbe line12
ja line20
straightline1:
mov ax,0
mov al,y1
cmp al,y2
jae sl11
jb sl12
sl11: mov dl, y1 ;draw straight line
x11: call dlm ;call draw line mode
mov cl, x1
dec dx
cmp dl, y2
jae x11
jmp line20
sl12: mov dl, y1
x12: call dlm ;call draw line mode
mov cl, x1
inc dx
cmp dl, y2
jbe x12
jmp line20
line20: mov al,x3
xchg al,x2
mov al,y3
xchg al,y2
jmp code2
hong endp
dlm proc near
mov al, 15 ; white
mov ah, 0ch ; put pixel
int 10h
ret
dlm endp
end start
作者: hongweinanr9 发布时间: 2011-06-27
动态输入三个坐标点没有问题,无法绘出三角形。急用啊~~周五就交啦!!!
作者: hongweinanr9 发布时间: 2011-06-27
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28