堆疊框架(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 相當於 ...