汇编71章关于键盘中断例程,看过代码的解答下,不然下面这么多你们看得烦哈,呵呵
本帖最后由 zhenglibob 于 2012-8-26 21:42 编辑请问一下,最后个iret指令时返回什么?请详解,想了很久了,在执行完最后的call指令中断例程中不是已经有iret返回指令了么,那最下面的指令返回的是什么呢?前面也没看见推入栈中什么啊?别笑话俺哈,俺不懂就问
assume cs:code
data segment
db 36 dup(0)
data ends
code segment
start: pushf
pushf
pop ax
and ah,11111100b
push ax
popf
mov ax,data
mov ds,ax
mov si,0
mov ax,0
mov es,ax
push es: ;将原中断例程的cs推入栈中
push es: ;将原中断例程的ip推入栈中
pop ds: ;将原中断例程的cs,ip依次放入内存中
pop ds:
mov es:,cs
mov es:,offset change
popf
mov ax,0b800h
mov es,ax
mov di,12*160+72
mov al,'a' ;al存放要显示的ASCII码
mov cl,2 ;cl存放字符的颜色
char:mov byte ptr es:,al
mov byte ptr es:,cl
inc al
call circle
cmp al,'z'
jna short char
mov ax,0
mov es,ax
push ds:
pop es:
push ds:
pop ds:
mov ax,4c00h
int 21h
circle:push ax ;循环次数,延缓字符更换时间
push dx
mov dx,1500h
mov ax,0
s1: sub ax,1
sbb dx,0
cmp ax,0
jne s1
cmp dx,0
jne s1
pop dx
pop ax
ret
;---------以下是更改int9中断例程的程序---------
change:push ax
push ds
push es
in al,60h
pushf
pushf ;
pop bx
and bh,11111100b
push bx
popf ;从上个注释号到这里可省略
call dword ptr ds:
cmp al,1
jne short home
mov ax,0b800h
mov es,ax
inc cl ;颜色属性加1更改属性
home:pop es
pop ds
pop ax
iret ;就是这个iret指令
code ends
end start
你要送我鱼币?
恭敬不如从命 额我都没有打完代码实在太长了 额还真的感谢你本来不懂得 不过又看了一遍你这个代码竟然懂了! {:9_230:} {:9_232:}
页:
[1]