組合語言之堆疊框架

2021-08-04 05:33:36 字數 781 閱讀 6580

堆疊框架(stack frame)也稱活動框架(activation record),他是為傳遞的引數、子例程的返回位址、區域性變數和儲存的暫存器保留的堆疊空間。

堆疊框架的建立步驟:

(1)如果有傳遞的引數,則壓入堆疊

(2)子例程被呼叫,子例程的返回位址壓入堆疊

(3)子例程開始執行時,ebp被壓入堆疊

(4)ebp設為esp的值,esp減去乙個數值,ebp就被作為定址所有子例程引數的基址指標使用了

(5)如果有區域性變數,esp減去乙個數值,以便在多站上為區域性變數儲存空間

(6)如果任何暫存器需要儲存,則壓入堆疊

堆疊結構的結構受程式的記憶體模式及引數傳遞約定的直接影響。

被呼叫的子例程訪問呼叫子例程時壓入堆疊的引數。在進行子例程呼叫是在多站上壓入了兩類引數:

值傳遞:在堆疊上壓入變數值的乙份副本的方式傳遞引數

push va1

push va2

call addtwo

push offset va1

push offset va2

call

swap

傳遞陣列:傳遞陣列時,總是傳遞引用

.data

array dword 50 dup(?)

.code

push offset array

call arrayfill

組合語言之定址方式

1 固定定址 inherent addressing 特定的單運算元指令,運算元隱含在操作碼中,在固定定址的指令中,運算元被隱含在指令中,不需要執行匯流排週期,執行速度快 例子 1.1 cbw命令,將al中的符號位擴充套件到ah中,形成16位的運算元。比如al中的符號位是1,則執行cbw命令後,ah...

組合語言之定址方式

如 mov ax,2a78 表示將乙個記憶體單元中的資料送入ax,這個記憶體單元的長度為2位元組 字單元 存放乙個字,偏移位址為2a78h,段位址 在ds中。如 mov al,10f3 表示將乙個記憶體單元中的資料送入al,這個記憶體單元的長度為1位元組 位元組單元 存放乙個位元組,偏移位址為10f...

組合語言之轉移指令

轉移指令 可以修改ip或同時修改cs和ip的指令統稱為轉移指令。短轉移ip的修改範圍 128 127 近轉移ip的修改範圍 32768 32767 1.操作符offset 例 assume cs codesg codesg segment start mov ax,offset start 相當於 ...