X86 PUSHA指令详解

来源:互联网 发布:店铺电脑收银软件 编辑:程序博客网 时间:2024/06/05 08:45

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#UDif(操作数宽度是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)}