汇编命令学习 - PUSHA/PUSHAD - 压入所有通用寄存器

PUSHA/PUSHAD - 压入所有通用寄存器

操作码

指令

说明

60

PUSHA

压入 AX、CX、DX、BX、原始 SP、BP、SI 及 DI

60

PUSHAD

压入 EAX、ECX、EDX、EBX、原始 ESP、EBP、ESI 及 EDI

说明

将通用寄存器的内容压入堆栈。这些寄存器按以下顺序存储到堆栈:EAX、ECX、EDX、EBX、ESP(原始值)、EBP、ESI 及 EDI(如果当前操作数大小属性为 32);AX、CX、DX、BX、SP(原始值)、BP、SI 及 DI(如果操作数大小属性为 16)。这些指令执行 POPA/POPAD 指令的逆操作。ESP 或 SP 寄存器压入的值是它在第一个寄存器压入之前的值(请参阅下面的“操作”部分)。

PUSHA(全部压入)与 PUSHAD(压入所有双字)助记符引用相同的操作码。当操作数属性为 16 时,使用 PUSHA 指令,而当操作数属性为 32 时,使用 PUSHAD 指令。某些汇编器可能在使用 PUSHA 时将操作数大小强制为 16,而在使用 PUSHAD 时将操作数大小强制为 32。其它汇编器可能会将这些助记符看作同义词 (PUSHA/PUSHAD),并使用操作数大小属性的当前设置来确定要压入堆栈的值的大小,而不管使用哪一个助记符。

在实地址模式中,如果执行 PUSH/PUSHAD 指令时,ESP 或 SP 寄存器为 1、3 或 5,则处理器会由于堆栈空间不足而关闭。不会生成指示此情况的异常。

操作

IF OperandSize  32 (* PUSHAD instruction *)
THEN
Temp  (ESP);
Push(EAX);
Push(ECX);
Push(EDX);
Push(EBX);
Push(Temp);
Push(EBP);
Push(ESI);
Push(EDI);
ELSE (* OperandSize  16, PUSHA instruction *)
Temp  (SP);
Push(AX);
Push(CX);
Push(DX);
Push(BX);
Push(Temp);
Push(BP);
Push(SI);
Push(DI);
FI;

影响的标志

无。

保护模式异常

#SS(0) - 如果起始或结束堆栈地址超出堆栈段限制。

#PF(错误代码) - 如果发生页错误。

#AC(0) - 如果在当前特权级别为 3 且启用对齐检查的情况下进行未对齐的内存引用。

实地址模式异常

#GP - 如果 ESP 或 SP 寄存器包含 7、9、11、13 或 15。

虚 8086 模式异常

#GP - 如果 ESP 或 SP 寄存器包含 7、9、11、13 或 15。

#PF(错误代码) - 如果发生页错误。

#AC(0) - 如果在启用对齐检查的情况下进行未对齐的内存引用。

【转】http://scc.qibebt.cas.cn/docs/optimization/VTune(TM)%20User's%20Guide/mergedProjects/analyzer_ec/mergedProjects/reference_olh/instruct32_hh/vc267.htm

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PUSH/PUSHA/PUSHAD指令用于将数据或寄存器的值压入堆栈。PUSH指令将一个值压入堆栈,PUSHA指令将AX、CX、DX、BX、SP、BP、SI、DI的值按从高到低的顺序压入堆栈,而PUSHAD指令将EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI的值按从高到低的顺序压入堆栈。 POP/POPA/POPAD指令用于从堆栈中弹出数据或寄存器的值。POP指令将一个值从堆栈弹出,POPA指令将堆栈中的值按从低到高的顺序弹出,分别存入AX、CX、DX、BX、SP、BP、SI、DI中,而POPAD指令将堆栈中的值按从低到高的顺序弹出,分别存入EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI中。 XCHG指令用于交换两个操作数的值。XLAT指令用于通过使用BX和AL寻址的方式,将AL中值与内存中的字节进行替换。BSWAP指令用于对寄存器中的32位数据进行字节顺序交换操作。 LEA指令用于将一个有效地址传送给目的操作数。LDS、LES、LFS、LGS、LSS指令用于将段描述符选择子传送给目的操作数的段寄存器。 总结来说,堆栈操作指令用于在堆栈中压入和弹出数据或寄存器的值,交换指令用于交换两个操作数的值,地址或段描述符选择子传送指令用于传送有效地址或段寄存器的值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [微机原理==常用汇编指令(9)](https://blog.csdn.net/weixin_29081101/article/details/118284476)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值