4、堆疊指令
在8086/8088系統中,堆疊實際是一段隨機訪問ram區域。
稱為棧底的一端位址較大,稱為棧頂的一端位址較小。
堆疊的段值在堆疊暫存器ss中
堆疊的指標暫存器sp始終指向棧頂
堆疊是以「後進先出」方式工作
堆疊的訪問必須以字為單位(16bit = 2btye)
堆疊的指令分為如下兩種:
(1)進棧指令push
格式如下:push src(源運算元)
該指令把源運算元src壓棧。
執行過程是:先把棧頂指標sp值減2,sp = sp-2
再把src中的值放入sp所指的棧頂中即 [ss*16+sp] = [src]
src可以是通用暫存器和段暫存器,也可以是字儲存單元
(2)出棧指令pop
格式如下:pop dst(目的運算元)
該指令把棧頂的元素放到dst中,然後把sp加2
執行過程如下:先把堆疊指標sp指的資料放到dst中,【dst】=【ss*16+sp】
再使sp = sp + 2
dst可以是通用暫存器和段暫存器(但是cs除外),也可以是字儲存單元。
注意:
(1)上面兩條指令push和pop只能是字操作
(2)可以使用除立即定址外的其他任何方式
(3)pop指令不允許使用cs暫存器
此兩條指令不影響flag標誌位
利用這兩條指令可以是實現兩個段暫存器的資料交換
例如:實現ds、es的資料交換
push ds
push es
pop ds
pop es
在彙編的過程中,堆疊操一般實現「現場儲存」和「現場恢復」,作為引數的傳遞緩衝區等。
彙總:
資料交換有三種方式:
傳送指令、交換指令、堆疊指令
舉例:交換ds、ax的資料
利用傳送指令
mov bx,ax
mov ax,ds
mov ds,bx
利用交換指令
xchg ax,ds《不能同時是段暫存器》
利用堆疊操作指令如上面的示例。
5、標誌操作指令
(1)標誌傳送指令
1、lahf(load ah flags)
把flag暫存器的低八位送到ah,即把cf pf af zf sf送到ah中。
不影響標誌暫存器。
2、sahf(store ah into flags)
把ah暫存器的八位傳送到flag暫存器的低八位中,剛好和上面的指令作用相反。
影響標誌暫存器。但是不影響8-15中的標誌位。
3、pushf和popf
把flag的標誌暫存器壓入和壓出。
可以通過他們的操作來改變flag中的標誌位的值。主要可以改變tf標誌。
8086彙編 資料傳送指令
於ibm pc組合語言程式設計 沈美明 溫冬嬋 編著 負責把 資料,位址或立即數傳送到暫存器或者儲存單元中.1.通用資料傳送指令 mov,push,pop,xchg mov指令在cpu內或cpu和儲存器之間傳送位元組或字,目的運算元不允許使用立即數,也不能用cs暫存器,不允許用mov指令在兩個儲存單...
組合語言資料傳送指令之堆疊操作指令
處理器通常用硬體支援堆疊 stack 資料結構,它是乙個按 先進後出 first in lastout,filo 訪問原則組織的儲存區域,也可以說是 後進先出 last in first out,lifo 訪問原則。堆疊具有兩種基本操作,對應兩條基本指令 資料壓進堆疊操作對應進棧指令push 資料彈...
彙編批量傳送指令
檢視linux核心 時,常常看到下面八個彙編指令,下面簡單講解一下它們的含義和用法。這8個是彙編常用的批量傳送指令,用來載入或者儲存幾個連續的記憶體。ldmib ldmia ldmdb ldmda stmib stmia stmdb stmda 觀察指令時可將指令分兩部分解釋 ldm load me...