鱼C论坛

 找回密码
 立即注册
查看: 3480|回复: 6

汇编中关于pushf iret push pop的问题

[复制链接]
发表于 2012-10-23 22:37:40 | 显示全部楼层 |阅读模式
1鱼币
int9:  push ax
         push bx
         push es
         in al,60h
   
         pushf
         pushf
         pop bx                                 ; 这里是取标志寄存器的值
         and bh,11111100b
         push bx
         popf                                       ;这里把修改的标志寄存器赋给标志寄存器
         call dword ptr ds:[0]
   
         cmp al,1
         jne int9end
   
         mov ax,0b800h
         mov es,ax
         inc byte ptr es:[160*12+80+1]
   
int9end: pop es            ;这里按照栈的规则应该是第一个pushf的值,为什么是es
              pop bx
              pop ax
              iret                   ;这里才恢复标志寄存器的值,最先推入栈的不是ax吗

这两处不懂,求助各位高手,谢谢

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-10-24 17:08:24 | 显示全部楼层
少年。。两次pushf是何意?写重了吧。再好好想想仔细看看,没错的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-21 09:08:56 | 显示全部楼层
我也在思考这个问题,两个pushf,其中一个在iret前已经popf了(用于if、tf值置0),另一个值按顺序应该是给了pop es,应该不是程序的意思,所以请高人点拨……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-21 21:41:25 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-5-21 22:39:03 | 显示全部楼层
这么久了,自己明白了,做个参考吧,iret 是中断返回指令,用于结束中断服务子程序的运行,返回中断前的主程序断点现场。执行 iret 时,它将依次出栈3个字送往IP,CS和标志寄存器。这是与中断指令(或硬件中断)的入栈过程(先标志寄存器入栈,然后CS,最后IP)相对应的逆操作。
造成进入这段中断程序的中断指令(或硬件中断IRQ请求响应过程)不在列出的这段中断服务子程序中。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-22 22:50:05 | 显示全部楼层
路过打酱油的强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-24 18:57:21 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-11 17:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表