SDM指令功能描述(PUSHA)
总体描述:
按照顺序将general-purpose寄存器压到栈上。按照当前的操作数宽度属性:
32:
EAX ECX EDX EBX ESP EBP ESI EDI
16:
AX CX DX BX SP BP SI DI
在实模式下,如果ESP/SP的值是1 3 5的时候,使用了PUSHA或PUSHAD指令则会触发#SS异常
注:D/B flag在代码段中表示指令引用有效地址和操作数的长度 此指令不可在64位下使用
伪代码:
64bit mode
#UD
if(操作数宽度是32) PUSHAD
{
temp = ESP
PUSH(EAX)
PUSH(ECX)
PUSH(EDX)
PUSH(EBX)
PUSH(temp)
PUSH(EBP)
PUSH(ESI)
PUSH(EDI)
}
else PUSHA
{
temp = SP
PUSH(AX)
PUSH(CX)
PUSH(DX)
PUSH(BX)
PUSH(temp)
PUSH(BP)
PUSH(SI)
PUSH(DI)
}