堆棧是一個(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指令——中介紹,在此從略
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指令——中介紹,在此從略