堆棧操作指令(StackOperationInstruction)

字號(hào):

堆棧是一個(gè)重要的數(shù)據(jù)結(jié)構(gòu),它具有“先進(jìn)后出”的特點(diǎn),通常用來保存程序的返回地址。它主要有兩大類操作:進(jìn)棧操作和出棧操作。
    1)、進(jìn)棧操作
    、PUSH(Push Word or Doubleword onto Stack)
    指令格式:PUSH Reg/Mem
    PUSH Imm          ;80286+
    一個(gè)字進(jìn)棧,系統(tǒng)自動(dòng)完成兩步操作:SP←SP-2,(SP)←操作數(shù);
     一個(gè)雙字進(jìn)棧,系統(tǒng)自動(dòng)完成兩步操作:ESP←ESP-4,(ESP)←操作數(shù)。
    、PUSHA(Push All General Registers)
    指令格式:PUSHA       ;80286+
    其功能是依次把寄存器AX、CX、DX、BX、SP、BP、SI和DI等壓棧。
    、PUSHAD(Push All 32-bit General Registers)
    指令格式:PUSHAD       ;80386+
    其功能是把寄存器EAX、ECX、EDX、EBX、ESP、EBP、ESI和EDI等壓棧。
    2)、出棧操作
    、POP(Pop Word or Doubleword off Stack)
    指令格式:POP Reg/Mem
    彈出一個(gè)字,系統(tǒng)自動(dòng)完成兩步操作:操作數(shù)←(SP),SP←SP-2;
    彈出一個(gè)雙字,系統(tǒng)自動(dòng)完成兩步操作:操作數(shù)←(ESP),ESP←ESP-4。
    、POPA(Pop All General Registers)
    指令格式:POPA       ;80286+
    其功能是依次把寄存器DI、SI、BP、SP、BX、DX、CX和AX等彈出棧。其實(shí),程序員不用記住它們的具體順序,只要與指令PUSHA對(duì)稱使用就可以了。
    、POPAD(Pop All 32-bit General Registers)
    指令格式:POPAD      ;80386+
    其功能是依次把寄存器EDI、ESI、EBP、ESP、EBX、EDX、ECX和EAX等彈出棧,它與PUSHAD對(duì)稱使用即可。
    7、轉(zhuǎn)換指令XLAT(Translate Instruction)
    轉(zhuǎn)換指令有兩個(gè)隱含操作數(shù)BX和AL。指令格式如下:
    XLAT/XLATB
    其功能是把BX的值作為內(nèi)存字節(jié)數(shù)組首地址、下標(biāo)為AL的數(shù)組元素的值傳送給AL。其功能描述的表達(dá)式是:AL←BX[AL],其功能示意圖如圖5.6所示。
    8、I/O指令
    有關(guān)I/O指令將在第8.1.2節(jié)——I/O指令——中介紹,在此從略