首先引出乙個問題
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函式!在嵌入式系統中 無...