PUSHAD 和 PUSHFD

本文详细介绍了在汇编语言中如何使用pushad、pusha、pushfd、pushf指令将32位与16位通用寄存器及标志寄存器压入堆栈,以及对应的popad、popa、popfd、popf指令从堆栈中取出这些寄存器的值。特别强调了pushad与popad指令在处理32位寄存器时的顺序与ESP寄存器的特殊处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来自:“http://blog.sina.com.cn/s/blog_af95b18b0101hmx0.html

 

pushad: 将所有的32位通用寄存器压入堆栈

pusha:将所有的16位通用寄存器压入堆栈

pushfd:然后将32位标志寄存器EFLAGS压入堆栈

pushf::将的16位标志寄存器EFLAGS压入堆栈

popad:将所有的32位通用寄存器取出堆栈

popa:将所有的16位通用寄存器取出堆栈

popfd:将32位标志寄存器EFLAGS取出堆栈

popf:将16位标志寄存器EFLAGS取出堆栈

 

_asm pushad

_asm pushfd

// 处理代码

_asm popfd

_asm popad

 

 

ZC: 观察OD中,pushad 是将 EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI 这8个32位寄存器压入栈中

ZC: 观察OD中,是将8个32位寄存器在执行pushad前的值 压入栈中,压入的顺序依次为 EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI

ZC:    popad 出站的顺序,和上面正好相反,但有一点: 不管ESP对应位置的值是什么 ESP的值都不会设置成这个值,ESP的值还是按照弹栈的方式来就按。(EDP的值是会被设置成对应位置的值的)

 

X

 

转载于:https://www.cnblogs.com/assemblyskill/p/5579368.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值