實驗部分
(以下命令為實驗樓64位Linux虛擬機環境下適用,32位Linux環境可能會稍有不同)
使用
- gcc?–S?–o?main.s?main.c?-m32
命令編譯成匯編代碼,
- int?g(int?x)
- {
- ??return?x?+?6;
- }
- ?
- int?f(int?x)
- {
- ??return?g(x);
- }
- ?
- int?main(void)
- {
- ??return?f(13)?+2;
- }
?
1. 實驗截圖
復制代碼到實驗樓
編譯,打開main.s(打開前忘記截圖,改完后截的圖)
刪完冗余部分,剩下的匯編代碼
? ? ? ? ? ?
2.分析匯編代碼的工作過程中堆棧的變化
?
3.總結部分需要闡明自己對“計算機是如何工作的”理解。
首先是了解計算機的工作模型://圖以及解說源自百度
(馮·諾依曼體系結構:把程序本身當作數據來對待,程序和該程序處理的數據用同樣的方式儲存。數字計算機的數制采用二進制;計算機應該按照程序順序執行。)
按老師給的圖也挺好理解://圖及解說源自云課堂截圖
IP:寄存器,總是指向內存的代碼段。 ? ? ? ? ? ? ? ? ? ? ? 內存:保存數據和指令。
CPU:CPU從IP指向的內存地址取指令執行,執行之后IP自加一,然后繼續執行。
然后我們可以大概了解計算機是如何工作的:
先在內存中運行第一條指令,然后根據其指令的內容及要求,從存儲器中取出相應的數據在CPU中執行,最后根據地址將結果返回到內存之中。
重復這樣的步驟直到停止指令出現或完成所有指令。
?
?
注:
姓名:林涵錦?
?《Linux內核分析》MOOC課程http://mooc.study.163.com/course/USTC-1000029000?