在屏幕上显示笑脸,显示坐标依次递增(或递减),碰到.....
时间:06-15来源:作者:点击数:150
在屏幕上显示笑脸,显示坐标依次递增(或递减),碰到.....
- 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
比较有意思的一个汇编程序。