彙編自動出棧 8086彙編 棧操作

2021-10-17 02:02:06 字數 1624 閱讀 3272

8086彙編 棧操作

棧結構一、說明

棧是一種只能在一端進行插入或刪除操作的資料結構。

棧有兩個基本的操作:入棧和出棧。

入棧:將乙個新的元素放到棧頂;

出棧:從棧頂取出乙個元素。

棧頂的元素總是最**棧,需要出棧時,又最先被從棧中取出。

棧的操作規則:lifo(last in first out,後進先出)。

二、8086棧

8086cpu提供相關的指令,支援用棧的方式訪問記憶體空間。

基於8086cpu的程式設計,可以將一段記憶體當作棧來使用。

棧操作一、指令介紹

push、pop 實質上就是一種記憶體傳送指令,可以在暫存器和記憶體之間傳送資料,與mov指令不同的是,push和pop指令訪問的記憶體單元的位址不是在指令中給出的,而是由ss:sp指出的。

執行push和pop指令時,sp 中的內容自動改變。

在ss,sp中存放棧頂的段位址和偏移位址,入棧和出棧指令根據ss:sp指示的位址,按照棧的方式訪問記憶體單元。

8086cpu中,push(入棧)和 pop(出棧)指令:

push ax:將ax中的資料送入棧中

pop ax:從棧頂取出資料送入ax

棧段暫存器ss      - 存放棧頂的段位址

棧頂指標暫存器sp    - 存放棧頂的偏移位址

ss:sp                  - 指向棧頂元素。

注:(以字為單位對棧進行操作)

二、原理解析

1、例:設將10000h~1000fh記憶體當作棧來使用……

2、入棧操作

3、出棧操作

三、棧的說明案

1、存入棧頂指標、棧的空間為10010h~10000h。棧的偏移量每次減去獲取的資料大小。

mov ax, 1000h

mov ss, ax

mov sp, 0010h

2、ax,bx,存入資料

mov ax, 001ah

mov bx, 001bh

3、將資料存入棧內、從1000fh開始存。

push ax

push bx

4、取出棧內資料存入ax,缺省會取指標1000ch存入的資料,取出資料後。由於sp+2、指標發生變化指標移動到1000eh。

pop ax

pop bx

5、檢視結構圖

6、push、pop 指令流程

push ax

(1)sp=sp–2;

(2)將ax中的內容送入ss:sp指向的記憶體單元處,ss:sp此時指向新棧頂。

pop ax

(1)將ss:sp指向的記憶體單元處的資料送入ax中;

(2)sp = sp+2,ss:sp指向當前棧頂下面的單元,以當前棧頂下面的單元為新的棧頂。

7、棧頂超界問題

當棧滿的時候再使用push指令入棧, 將發生棧頂超界問題。

當棧滿的時候再使用pop指令入棧, 將發生棧頂超界問題。

8086cpu不保證對棧的操作不會超界。 8086cpu 只知道棧頂在何處(由ss:sp指示),不知道程式安排的棧空間有多大。

我們在程式設計的時候要自己操心棧頂超界的問題 ,要根據可能用到的最大棧空間,來安排棧的大小,防止入棧的資料太多而導致的超界;防止出棧時棧空了仍然繼續出棧而導致的超界。

彙編自動出棧 組合語言入棧出棧PUSH和POP指令

前面我們一直在使用push ax和pop ax,顯然push和pop指令是可以在暫存器和記憶體 棧空間當然也是記憶體空間的一部分,它只是一段可以以一種特殊的方式進行訪問的記憶體 空間。之間傳送資料的。push和pop指令的格式可以是如下形式 push 暫存器 將乙個暫存器中的資料入棧 pop 暫存器...

ARM彙編之棧

建立程序的時候,會分配記憶體作為棧。實際棧指令 push,pop 是其他指令的別名,實際指令是str ldr或者其延伸指令。例s b sp,push 棧實現的幾種情況 堆疊型別 store load 完全下降 高位址在上,低位址在下 stmfd s b ldmfd ldm 完全公升序 高位址在下,低...

8086組合語言學習 三 8086中的段和棧

8086對記憶體定址的方式是通過段位址 16 偏移位址的方式實現的,而在16位的8086cpu下,段位址和偏移位址也都是16位的。這意味著,對於任意乙個段,段的起始位址必定為16的倍數 段位址 16 需要注意,記憶體段的概念並不是記憶體硬體所固有的,而是從cpu定址的角度出發,將記憶體中的物理連續區...