主题:程序最后一条指令iret返回到那了
当键盘输入到达60H端口时,产生外中断,然后调用INT9,这是我加载到内存的程序,
pushf call dword ptr cs:[200h]这俩条指令是寄存器和IP,CS入栈,
然后去调用BIOS提供的 int9,在调用之前,也是先把寄存器和IP,CS入栈吧,然后出栈,
那程序最后的一条iret返回到那里了,应该返回到cmp al,3bh这里吧,这样的话不是执行俩次了.
int9: push ax
push bx
push cx
push es
in al,60h
pushf
call dword ptr cs:[200h] ;调用原有的INT9.
cmp al,3bh
jne int9ret
mov ax,0b800h
mov es,ax
mov bx,1
mov cx,2000
s: inc byte ptr es:[bx]
add bx,2
loop s
int9ret: pop es
pop cx
pop bx
pop ax
iret
int9end: nop
pushf call dword ptr cs:[200h]这俩条指令是寄存器和IP,CS入栈,
然后去调用BIOS提供的 int9,在调用之前,也是先把寄存器和IP,CS入栈吧,然后出栈,
那程序最后的一条iret返回到那里了,应该返回到cmp al,3bh这里吧,这样的话不是执行俩次了.
int9: push ax
push bx
push cx
push es
in al,60h
pushf
call dword ptr cs:[200h] ;调用原有的INT9.
cmp al,3bh
jne int9ret
mov ax,0b800h
mov es,ax
mov bx,1
mov cx,2000
s: inc byte ptr es:[bx]
add bx,2
loop s
int9ret: pop es
pop cx
pop bx
pop ax
iret
int9end: nop