彙編指令之資料傳送指令續集 三

2021-06-03 17:00:44 字數 1397 閱讀 6160

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...