理解函數調用棧幀的概念,並能用GDB進行調試git
ISA:定義了處理器狀態,指令的格式,每條指令對狀態的影響。vim
gcc -O1 -S text.c
使用gcc產生一個彙編文件code.s,可使用vim查看安全
gcc -O1 -c text.c
使用gcc產生目標代碼文件。從中可知及其實際執行的程序只是對一系列指令進行編碼的字節序列。函數
objdump -d test.o
不一樣數據的彙編代碼的數據學習
字節 b 1 字 w 2 雙字/雙精度 l 4/8 單精度 s 4 拓展精度 t 10/12
操做數三種類型編碼
movl類設計
add類3d
這些操做被分爲四組:加載有效地址、一元操做、二元操做和移位指針
leal指令調試
若%eax存儲x,leal 7(%edx,%edx,4) 是將%eax的值設置委5x+7
jump指令能夠改變一組機器代碼指令的執行順序。
條件碼寄存器:描述了最近的算數或邏輯操做的屬性
一個過程調用包括將數據和控制從代碼的一部分傳遞到另外一部分。另外,它還必須在進入時爲過程的局部變量分配空間,並在退出時釋放這些空間。
I32程序用程序棧來支持過程調用
機器用棧來傳遞過程參數,存儲返回信息,保存寄存器用於之後恢復,以及本地存儲。
call
call指令有一個目標,即指明被調用過程起始的指令地址,調用能夠是直接的也能夠是間接的
call指令效果是將返回地址入棧,並跳轉到被調用過程的起始處。
ret
ret指令從棧中彈出地址,並跳轉到這個位置。棧指針要指向前面call指令所存儲返回地址的位置。
寄存器%eax、%edx和%ecx被劃分委調用者保存寄存器(P調用Q時,Q能夠覆蓋這些寄存器,而不會破壞P所需的任何數據
寄存器%ebx、%esi和%edi被劃分委調用者保存寄存器(Q必須在覆蓋這些寄存器的值以前將他們保存在棧中)
本週解決了git推送代碼的問題,而且成功將代碼推送至開源中國。
一開始不知道什麼緣由,不能push,再我不斷嘗試後終於成功了
本週學習了深刻理解計算機系統第3章的知識,本章學習的內容主要是學習計算機的彙編語言。認識計算機如何將c語言程序轉換爲彙編語言,而後再將彙編語言轉換爲機器語言。在學習本章時仍是以爲學習進程很緩慢,有時在一個知識點須要停留好久才能搞懂,之後還得多加練習,勤能補拙。
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第二週 | 0/0 | 1/2 | 19/20 | |
第三週 | 80/80 | 1/3 | 25/44 | |
第四周 | 110/190 | 1/4 | 23/67 | |
第五週 | 60/250 | 2/6 | 26/93 |