1. 程式人生 > >函式的呼叫(彙編程式碼分析)

函式的呼叫(彙編程式碼分析)

1.sum函式呼叫完為什麼會回退到main函式的呼叫棧針上。
2.為什麼呼叫完後會從下一行執行。
3.值是怎麼傳遞的,是形參開闢記憶體,還是實參開闢。

# include<stdio.h>
int sum(int first,int second)
{
	int tmp;
	tmp = first+second;
	return tmp;
}

int main()
{
	int a = 10;
	int b = 20;
	int rt = sum(a,b);
	return 0;
}

1.設定斷點,啟動debug模式。
2.除錯-》視窗-》反彙編得到下圖所示彙編程式碼。
在這裡插入圖片描述
分析彙編程式碼:
push:壓棧
pop:出棧,把棧上資料給暫存器
call:1.壓入下一行地址,2,jump跳轉到(sum)函式棧頂
mov:把數值移動到暫存器
lea:挪指標
add:累加
sub:減
pc暫存器:存放一條指令的地址。
暫存器入棧,相當於在棧頂開闢記憶體,這塊記憶體即為形參地址空間。
eax ebx ecx是存放數值的暫存器。
ebp棧底指標暫存器
esp棧頂指標暫存器
引數傳遞的方向:從右向左。函式的返回值由暫存器帶回。

在這裡插入圖片描述
形參開闢記憶體在main函式上。