; 編寫程序實現demo.exe演示效果。
;提示:小球運動行號列號變化規律是
; 碰到上壁則行號變爲自增規律
; 碰到下壁則行號變爲自減規律
; 碰到左壁則列號變爲自增規律
; 碰到右壁則列號變爲自減規律
;當運動到的地方已經有小球存在時,將其顏色變爲綠色
;思路分析:主函數中調用三個子程序
; (1)判斷邊界(2)顯示笑臉(3)延時
;初始化:行dh=0,列dl=0,
; 行方向bh=1,列方向bl=1
assume cs:code
code segment
start: mov dx,0
mov bh,1
mov bl,1
mov cx,50*80 ;顯示出50*80個笑臉後結束
mains: call judge
call show_str
call delay
loop mains
mov ax,4c00h
int 21h
;名稱:judge
;功能:判斷邊界
;參數:(dh)=行,(dl)=列
judge:
judgeh:cmp dh,24
je seth24
cmp dh,0
je seth0
jmp short ok0
seth24: mov bh,-1
jmp short judgel
seth0:mov bh,1
ok0:nop
judgel:cmp dl,79
je setl79
cmp dl,0
je setl0
jmp short ok1
setl79:mov bl,-1
jmp short ok1
setl0:mov bl,1
ok1:ret
名稱:show_str
;功能:在屏幕上顯示字符‘笑臉’
;參數:(dh)=行,(dl)=列,(bh)=行方向,(bl)=列方向
show_str: push ax
push bx
push dx
mov ax,0b800h
mov es,ax
mov si,0
add dh,bh
add dl,bl
;計算dh*160+dl*2
mov al,160
mul dh
mov dh,0
add ax,dx
add ax,dx
mov si,ax
cmp byte ptr es:[si],1
jne next
mov byte ptr es:[si],1
mov byte ptr es:[si+1],02h
next: mov byte ptr es:[si],1
pop dx
add dh,bh
add dl,bl
pop bx
pop ax
ret
;名稱:delay
;功能:延時
;參數:無
delay:push cx
mov cx,020ffh
s0:push cx
mov cx,020ffh
s1:nop
loop s1
pop cx
loop s0
pop cx
ret
code ends
end start