淺析計算機中彙編程式碼是怎麼執行的
阿新 • • 發佈:2019-02-20
第一部分
程式程式碼:
通過如下指令
第二部分
生成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