📄 ball.asm
字号:
cal macro opr ;calculate x*x
mov ax,opr
mul ax
endm
write macro bcol
local exitw
mov ah,0dh
int 10h
cmp al,9
je exitw
mov al,bcol ;write pix
mov ah,0ch
int 10h
exitw:
endm
drawb macro bcol,brad,x,y ;draw ball,color radius (x,y)
loopd:
mov al,brad
cbw
mov di,ax ;outer loop 0<y1-y<R
loopx:
mov al,brad
cbw
mov si,ax ;inner loop 0<x1-x<R
loopy:
cal si ;(x1-x)*(x1-x)
mov temp1,ax
cal di ;(y1-y)*(y1-y)
add temp1,ax ;(x1-x)*(x1-x)+(y1-y)*(y1-y)
mov al,brad
cbw
cal ax ;R*R
sub temp1,ax ;(x1-x)*(x1-x)+(y1-y)*(y1-y)-R*R
jns nextd
mov dx,y
mov cx,x
write bcol ;write center of circle
add dx,di
add cx,si
write bcol ;write point (x+si,y+di)
sub cx,si
sub cx,si
write bcol ;write point (x-si,y+di)
mov dx,y
mov cx,x
sub dx,di
sub cx,si ;write point (x-si,y-di)
write bcol
add cx,si
add cx,si
write bcol write point (x+si,y-di)
nextd:
dec si
cmp si,0
jl nextdb
jmp loopy
nextdb:
dec di
cmp di,0
jl exitdb
jmp loopx
exitdb:
endm
data_seg segment
temp1 dw ?
b_color db ?
b_radius db ?
b_speed db ?
x dw 320
y dw 120
data_seg ends
drawball proc near
drawb b_color,b_radius,x,y
ret
drawball endp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -