將通用寄存器的內容壓入堆棧。這些寄存器按如下順序存儲到堆棧:EAX、ECX、EDX、EBX、EBP、ESP(原始值)、EBP、ESI 及 EDI(若是當前操做數大小屬性爲 32);AX、CX、DX、BX、SP(原始值)、BP、SI 及 DI(若是操做數大小屬性爲 16)。這些指令執行 POPA/POPAD 指令的逆操做。ESP 或 SP 寄存器壓入的值是它在第一個寄存器壓入以前的值(請參閱下面的「操做」部分)。ui
PUSHA(所有壓入)與 PUSHAD(壓入全部雙字)助記符引用相同的操做碼。當操做數屬性爲 16 時,使用 PUSHA 指令,而當操做數屬性爲 32 時,使用 PUSHAD 指令。某些彙編器可能在使用 PUSHA 時將操做數大小強制爲 16,而在使用 PUSHAD 時將操做數大小強制爲 32。其它彙編器可能會將這些助記符看做同義詞 (PUSHA/PUSHAD),並使用操做數大小屬性的當前設置來肯定要壓入堆棧的值的大小,而無論使用哪個助記符。htm
在實地址模式中,若是執行 PUSH/PUSHAD 指令時,ESP 或 SP 寄存器爲 一、3 或 5,則處理器會因爲堆棧空間不足而關閉。不會生成指示此狀況的異常。get
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;it