汇编中关于pushf iret push pop的问题
int9:push axpush bx
push es
in al,60h
pushf
pushf
pop bx ; 这里是取标志寄存器的值
and bh,11111100b
push bx
popf ;这里把修改的标志寄存器赋给标志寄存器
call dword ptr ds:
cmp al,1
jne int9end
mov ax,0b800h
mov es,ax
inc byte ptr es:
int9end: pop es ;这里按照栈的规则应该是第一个pushf的值,为什么是es
pop bx
pop ax
iret ;这里才恢复标志寄存器的值,最先推入栈的不是ax吗
这两处不懂,求助各位高手,谢谢 少年。。两次pushf是何意?写重了吧。再好好想想仔细看看,没错的 我也在思考这个问题,两个pushf,其中一个在iret前已经popf了(用于if、tf值置0),另一个值按顺序应该是给了pop es,应该不是程序的意思,所以请高人点拨…… 强烈支持楼主ing…… 这么久了,自己明白了,做个参考吧,iret 是中断返回指令,用于结束中断服务子程序的运行,返回中断前的主程序断点现场。执行 iret 时,它将依次出栈3个字送往IP,CS和标志寄存器。这是与中断指令(或硬件中断)的入栈过程(先标志寄存器入栈,然后CS,最后IP)相对应的逆操作。
造成进入这段中断程序的中断指令(或硬件中断IRQ请求响应过程)不在列出的这段中断服务子程序中。 路过打酱油的强烈支持楼主ing…… 强烈支持楼主ing……
页:
[1]