在屏幕上显示笑脸,显示坐标依次递增(或递减),碰到.....
时间:06-15来源:作者:点击数:
在屏幕上显示笑脸,显示坐标依次递增(或递减),碰到.....
assume cs:code
code segment
dec dh
dec dl
inc dh
inc dl ;预存指令
start: mov ax,cs
mov ds,ax
mov si,0
lea di,s1 ;使ds:si指向预存指令,ds:di指向目的地址
mov dx,0h ;光标起始坐标0,0
s:mov ah,2
mov bh,0
int 10h ;调用int 10h第2号中断,置光标
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
mov ah,0ah ;int 10h第0a号中断
mov al,2 ;显示笑脸
mov bh,0 ;第0页
mov cx,1 ;重复次数1
int 10h
call delay ;延迟显示
in al,60H
cmp al,10H
jz over
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
mov ah,0ah ;用int 10h 0a号中断清除笑脸
mov al,0
mov bh,0
int 10h
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
cmp dh,24 ;行号是否为24
jb L ;小于则转 L
mov ax,[si] ;等于则改s1处为自减
mov [di],ax
L2:cmp dl,79 ;列号是否为79
jb L1 ;小于则转 L1
mov ax,[si+2] ;等于,改si+2处为自减
mov [di+2],ax
jmp s1
L:cmp dh,0 ;行号是否为0
ja L2 ;大于0转L2
mov ax,[si+4] ;为0 ,改s1处为自加
mov [di],ax
jmp L2
L1:cmp dl,0 ;列号是否为0
ja s1 ;大于转 s1
mov ax,[si+6] ;等于改 s1+2处 自加
mov [di+2],ax
s1:inc dh
inc dl
jmp s
over: mov ax,4c00h
int 21h
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
delay:push ax
push dx
mov dx,500h
mov ax,0
s3: sub ax,1
sbb dx,0
cmp ax,0
jne s3
cmp dx,0
jne s3
pop dx
pop ax
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
code ends
end start
比较有意思的一个汇编程序。