乙個空函式的棧楨建立及初始化

2021-07-09 02:24:27 字數 1072 閱讀 7751

函式棧楨的建立、初始化及清除

本文目的在於描述函式棧楨的建立初始化和清除等過程,因此只對暫存器、彙編指令做一些簡單的介紹。

一、一些暫存器的基本介紹(x86處理器中)

圖中通用暫存器中:

eax  通常用於計算,作為累加器。

ebx 

ecx  通常用於迴圈變數計數,作為計數器。

edx 

esi  通常在記憶體操作指令中作為「源位址指標」使用。

edi  通常在記憶體操作指令中作為「目的位址指標」使用

圖中指標暫存器中:

ebp  基址指標,用於指示子程式或者函式呼叫的基址指標。

esp  棧指標,用於指示棧頂的位置。

二、一些簡單彙編指令介紹(x86彙編)

資料傳送指令:

mov  將第二個運算元複製到第乙個運算元

push  入棧,將運算元壓入記憶體的棧中,將esp的值減4

pop  出棧,首先將esp指示的位址的內容出棧,然後將esp的值加4

lea  載入有效位址的指令,將第二個運算元的位址載入到第乙個運算元

算數和邏輯指令:

sub  將第乙個運算元減去第二個運算元,並將相減後的值儲存在第乙個運算元。

xor  邏輯異或,常用來對暫存器的值清0。

控制轉移指令:

ret  彈出棧中儲存的指令位址,然後無條件轉移到儲存的指令位址執行。

rep stos  rep的目的是重複之前的一條指令,該指令之前的ecx是重複的次數。stos的作用是將eax的值拷貝到該指令運算元所指的位置。

三、乙個空函式棧楨的建立、初始化及清除

測試**:

int  main( )

return 0;

反彙編**及解釋:

參考:x86彙編快速入門  

簡明x86彙編    

函式呼叫堆疊  

函式的呼叫,棧楨的建立及銷毀

下面我們主要從棧的層面深入了解c語言中函式呼叫的過程。下面我用乙個簡單的程式說明 include include int add int x,int y int main 011e1880 pop edi 011e1881 pop esi 011e1882 pop ebx 011e1883 add ...

初始化乙個指標的方法

方法1.在用到指標的地方.cpp中 cinfo pinfo pinfo cinfo createinfo 中是類cinfo的定義 ifndef info h define info h include using namespace std class cinfo endif 類cinfo的.cpp...

乙個簡單的初始化問題

也許只有實踐才知道自己的c語言基礎有多薄弱。今天在vc知識庫論壇上問了乙個弱弱的問題。我在乙個類裡宣告 enum charm cbuffer sbf 然後在建構函式裡初始化 m cbuffer sbf 編譯時出現了這些錯誤 syntax error 之後我將這個初始化語句改為 memset m cb...