📄 88.asm
字号:
data segment
r dw ? ;半径
d dw ?
a dw ?
b dw ?
x1 dw 100 ;圆心
y1 dw 60
x2 dw ?
y2 dw ?
x3 dw ?
y3 dw ?
x4 dw ?
y4 dw ?
x dw ?
y dw ?
m dw ?
n db ? ;象素颜色值
k dw ? ;传递半径大小
l db ? ;传递圆宽度大小
string db 'Please input radius(10=<r<=45):','$'
string2 db 0dh,0ah,'please input the nums of circuls(q is quit):','$'
string3 db 0dh,0ah,'Please input the right nums:','$'
string4 db 0dh,0ah,'Please input the num of skin(s,m,b):','$'
data ends
code segment
assume cs:code,ds:data
main proc far
start: mov ax,data
mov ds,ax
call clear
mov si,0
mov di,0
mov si,x1
mov x3,si
mov si,y1
mov y3,si
mov si,0
call circul
mov ah,4ch
int 21h
main endp
clear proc near
mov ax,0600h
mov cx,0
mov dx,184fh
mov bh,7
int 10h
ret
clear endp
circul proc near
push si
mov ah,0 ;设置显示方式
mov al,13h ;320*200
int 10h
lea dx,string
mov ah,9
int 21h
call decibin ;输入半径
mov k,bx
lea dx,string4
mov ah,9
int 21h
mov ah,1
int 21h
mov l,al ;宽度大小
lea dx,string2
mov ah,9
int 21h
ok:
mov ah,1
int 21h
cmp al,'1'
jne t2
mov n,9h
mov x,0
mov bx,k
mov y,bx
mov si,x3
mov x1,si
mov si,y3
mov y1,si
jmp abcc
t2: cmp al,'2'
jne t3
mov n,7h
mov x,0
mov bx,k
mov y,bx
mov si,x3
mov x1,si
mov si,y3
mov y1,si
add y1,bx
add y1,bx
shr bx,1
add y1,bx
jmp abcc
t3: cmp al,'3'
jne t4
mov n,29h
mov x,0
mov bx,k
mov y,bx
mov si,x3
mov x1,si
mov si,y3
mov y1,si
add y1,bx
add y1,bx
add y1,bx
add y1,bx
add y1,bx
jmp abcc
t4: cmp al,'4'
jne t5
mov n,6h
mov x,0
mov bx,k
mov y,bx
mov si,x3
mov x1,si
mov si,y3
mov y1,si
add x1,bx
add y1,bx
shr bx,1
shr bx,1
add y1,bx
jmp abcc
t5: cmp al,'5'
jne tq
mov n,30h
mov x,0
mov bx,k
mov y,bx
mov si,x3
mov x1,si
mov si,y3
mov y1,si
add x1,bx
add y1,bx
add y1,bx
add y1,bx
shr bx,1
add y1,bx
shr bx,1
add y1,bx
jmp abcc
tq: cmp al,'q'
jne ok1
abccd: pop si
ret
abcc: call move_shape
ok1: jmp ok
circul endp
decibin proc near ;十进制转换二进制,存入BX
mov bx,0
new:
mov ah,1
int 21h
mov dl,al
cmp al,0dh
jne next
cmp bx,0 ;限制单位数
je exit2
next: cmp al,30h
jl exit2
cmp al,39h
jg exit2
sub al,30h
cbw
xchg ax,bx
mov cx,10
mul cl
xchg ax,bx
add bx,ax
cmp bx,10 ;限制两位数
jge exit1
jmp new
exit2: lea dx,string3
mov ah,9
int 21h
mov bx,0
jmp new
exit1: cmp bx,45
jg exit2
ret
decibin endp
move_shape proc near
mov si,k
mov r,si
mov si,1
sub si,r
mov d,si
lin3: mov si,x
mov di,y
add si,x1
add di,y1
mov dx,si
mov cx,di
mov si,x
mov di,y
cmp si,di
jg lin
call hua
cmp d,0
jge lin1
mov si,2
mov ax,0
mov AX,SI
imul x
mov si,ax
add si,3
add d,si
lin2: inc x
jmp lin3
lin1: mov si,2
mov ax,0
mov ax,si
mov di,x
sub di,y
imul di
mov si,ax
add si,5
add d,si
dec y
jmp lin2
lin:
ret
move_shape endp
huadian2 proc near
mov ah,0CH
mov AL,n
MOV BH,0
int 10h
ret
huadian2 endp
huadian proc near
cmp l,'m'
je mmm
cmp l,'b'
je bbb
jmp sss
ret
mmm: call huadian2
mov x4,dx
mov y4,cx
add dx,1
call huadian2
add cx,1
call huadian2
mov dx,x4
mov cx,y4
add cx,1
call huadian2
mov dx,x4
mov cx,y4
ret
bbb: call huadian2
mov x4,dx
mov y4,cx
add cx,1
call huadian2
sub cx,2
call huadian2
add dx,1
call huadian2
inc cx
call huadian2
inc cx
call huadian2
add dx,1
call huadian2
dec cx
call huadian2
dec cx
call huadian2
mov dx,x4
mov cx,y4
ret
sss: call huadian2
ret
huadian endp
hua proc near
call huadian ;画第一点 (x,y)
mov x2,dx
mov y2,cx
sub dx,x1
sub cx,y1
xchg dx,cx
add dx,x1
add cx,y1
call huadian ;画对称点(y,x)
mov dx,x2
mov cx,y2
sub cx,y1
sub dx,x1
xchg dx,cx
mov m,dx
add m,dx
sub dx,m
add dx,x1
add cx,y1
call huadian ;画点(-y,x)
sub cx,y1
mov m,cx
add m,cx
sub cx,m
add cx,y1
call huadian ;画点(-y,-x)
mov dx,x2
mov cx,y2
sub dx,x1
sub cx,y1
mov m,cx
add m,cx
sub cx,m
add cx,y1
add dx,x1
call huadian ;画点 (x,-y)
sub dx,x1
mov m,dx
add m,dx
sub dx,m
add dx,x1
call huadian ;画点(-x,-y)
mov dx,x2
mov cx,y2
sub dx,x1
sub cx,y1
mov m,dx
add m,dx
sub dx,m
add dx,x1
add cx,y1
call huadian ;画点 (-x,y)
mov dx,x2
mov cx,y2
sub dx,x1
sub cx,y1
xchg dx,cx
mov m,cx
add m,cx
sub cx,m
add dx,x1
add cx,y1
call huadian ;画点 (y,-x)
call delay
ret
hua endp
delay proc near ;延时程序
push dx
push cx
mov dx,10000
dl1: mov cx,6500
dl2: loop dl2
dec dx
jnz dl1
pop cx
pop dx
ret
delay endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -