1. 程式人生 > >淺析計算機中彙編程式碼是怎麼執行的

淺析計算機中彙編程式碼是怎麼執行的

第一部分

程式程式碼:


通過如下指令


第二部分

生成main.s檔案,即彙編程式碼


main.s檔案彙編程式碼刪掉部分無關程式碼,如下所示

g:
	pushl %ebp
	movl  %esp,%ebp
	movl  8(%ebp),%eax
	addl  $10,%eax
	popl  %ebp
	ret
f:
	pushl %ebp
	movl  %esp,%ebp
	subl  $4,%esp
	movl  8(%ebp),%eax
	movl  %eax,(%esp)
	call  g
	leave
	ret
main:
	pushl %ebp
	movl  %esp,%ebp
	subl  $4,%esp
	movl  $29,(%esp)
	call f
	addl  $5,%eax
	leave
	ret

第三部分

彙編程式碼如上,分析採用圖解,如下所有圖

零.


一.


二.


三.


四.


五.


六.


七.


八.


九.


十.


十一.


十二.


十三.


十四.


十五.


十六.


十七.


十八.


十九.


二十.


二十一.


圖終於貼完了,二十幾張圖有點害怕。。。

以上每幅圖解釋了指令的執行,和esp等暫存器的指向及堆疊的變化

第四部分

總結:程式編譯生成彙編程式碼,然後eax,esp,ebp,eip等暫存器結合堆疊實現彙編程式碼的執行,

由eip暫存器可以發現是不斷的從記憶體中取出程式碼指令,然後CPU執行,通過esp記錄當前堆疊的位置,

通過ebp記錄當前函式的基地址,通過call指令實現函式之間的呼叫跳轉,通過ret指令實現函式的返回等等。

所以綜上,計算機的執行就是不斷的取指令,執行指令的過程。

王宣原創作品轉載請註明出處《Linux核心分析》MOOC課程http://mooc.study.163.com/course/USTC-1000029000