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

[复制链接]
查看11 | 回复3 | 2012-10-23 23:38:22 | 显示全部楼层 |阅读模式
由于你的程序给出的只是片段,具体功能看不出来,前面有两条连续重复出现的pushf指令似乎还是个错误,所以只能针对指令说一下。 关于你的第一处问题“这里按照栈……为什么是es”,程序没有错,是你理解上的问题。栈,是一种先进后出的数据结构,按ax,bx,es顺序先后入栈的数据,ax内容被压在最底下,es的内容在最上面靠近栈顶。要恢复原样,出栈时上面的先弹出,所以必须按先es,后bx,再ax这样的顺序出栈。 关于你的第二个问题“这里才恢复标志……不是ax吗”,iret 是中断返回指令,用于结束中断服务子程序的运行,返回中断前的主程序断点现场。执行 iret 时,它将依次出栈3个字送往IP,CS和标志寄存器。这是与中断指令(或硬件中断)的入...
回复

使用道具 举报

千问 | 2012-10-23 23:38:22 | 显示全部楼层
可能的原因1.书写错误pushfpushf多了一个2.pushfpushf中第一个为dword ptr ds:[0]入口参数,由dword ptr ds:[0]负责堆栈平衡。...
回复

使用道具 举报

千问 | 2012-10-23 23:38:22 | 显示全部楼层
call dword ptr ds:[0]关键在于这一句,这一句是模拟中断调用,调用结束返回时,flags,cs,ip都出栈了开始执行下面的语句 cmp al,1
jne int9end
mov ax,0b800h
mov es,ax
inc byte pt...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行