程式 通過彙編了解程式的實際構成

2021-08-11 16:47:36 字數 1303 閱讀 9089

首先引出乙個問題

void    sum (int a, int b)

這個函式運用正確

為什麼,但是我的疑惑是我在函式裡面並沒有定義a,b。這個兩個引數只是傳進來。為什麼可以運用那。

我們可以通過彙編來很好的解釋 函式呼叫的過程。

//返回兩個引數值之和的函式

int addnum(int a,int b)

//呼叫addnum函式的函式

void myfunc()

__addnum proc near

int addnum(int a,int b)

在函式內部利用的暫存器,要盡量返回到函式呼叫前的狀態。為此,我們就需要將其戰術儲存在棧中,然後再在函式處理完畢前出棧,使其返回到原理的狀態。

這裡強調一點:

引數是通過棧來傳遞的,返回值是通過暫存器來返回的。

push    ebp

mov ebp,esp

return a+b;

mov eax,dword   ptr [ebp+8]

add eax,dword ptr [ebp+12]

pop ebp

ret

__addnum endp

__myfunc proc near

void myfunc()

push ebp

mov ebp,esp

int c;

c = addnum;

這裡的引數是通過push入棧的

c語言規定是位於後面的數值先入棧。

組合語言中函式名表示是所在的記憶體位址

下面這個add esp,8 會把棧中儲存的兩個引數(456和123)進行銷毀,雖然記憶體中的資料實際還存在著,但只要把esp暫存器的值更新為資料儲存位址前面的資料位置,該資料就相當銷毀了。

push    456

push 123

call _addnum

add esp,8

pop ebp

ret__myfunc endp

偽指令負責把程式的構造及彙編的方法指示給彙編器

源**的開始位置,定義了3個名稱分別為

__text(指令的段定義)

__data(有初始值的資料段定義)

__bss(是尚未初始化的資料的段定義)

Python程式的構成

python程式有模組組成。乙個模組對應python原始檔,一般字尾名是.py 模組由語句構成。執行python程式時,按照模組中語句的順序一次執行 語句是python程式的構造單元,用於建立物件 變數賦值 呼叫函式 控制語句等 互動式環境每次只能執行一條語句 為了編寫多條語句實現複雜的邏輯,需要通...

python程式的構成 python程式的構成

python程式的構成 1 python程式由模組組成。乙個,模組對應pythom原始檔,一般字尾名師 py 2 模組由語句組成。執行python程式是,按照模組中語句的順序依次執行 3 語句是python程式的構成單元,用於建立物件 變數賦值呼叫函式等。python檔案的建立執行 互動模式下,每次...

C語言,程式的構成

預設環境為linux環境,不考慮多程序環境!程式的執行過程 c程式的入口函式是main 程式的入口函式是main函式,是由裝載器決定的!以 linux elf可執行檔案為例,在編譯程式時,編譯器會為程式鏈結裝載器,程式執行時會首先呼叫裝載器,引導程式到記憶體,隨後呼叫main函式!在嵌入式系統中 無...