這2章總結的很少,主要是覺得沒那麼重要。
1.1)2個運算元的指令,第二個運算元通常是目的運算元:movb a b,move a to b,而add a b,b+=a,指令分為指令類,如mov類:movb,movw,movl,b指乙個位元組,w表示2個位元組,l表示4個位元組;movs類(擴充套件填符號),movz類(擴充套件填0)
2)暫存器:這裡只說ia32體系的那8個32位暫存器,存數值和指標,都以%e開頭,特殊地,最後兩個:%esp是棧指標,%ebp是幀指標;指令可以獨立地讀取或寫入前4個暫存器的2個低位位元組,如movw %ax,%cx,或movb %al,%cl,所以一般說8個四位元組暫存器(%eax),8個雙位元組暫存器(%ax),8個單位元組暫存器(%al),但硬體上只有8個四位元組暫存器,後2者是前者的部分
3)運算元分3類:
立即數,即常數值(格式:$0xf);
暫存器,表示某個暫存器存的內容(%eax,%ax,%al等);
儲存器引用,(格式:4(e1,e2,s)表示運算元的位址是:4+暫存器e1存的內容+暫存器e2存的內容*s:
%eax;$0x11;0x01;(%eax);4(%eax);(%eax,%ecx,3),前2個對應暫存器運算元和立即數運算元,後面的都是儲存器引用運算元
2.4.控制,主要講了條件跳轉指令jmp類和條件傳送指令cmov類,忽略,本來以為能看到luajit的一些跳轉知識,結果沒有。大量if-else不如switch,不過這沒什麼實際用吧。
(關於條件傳送那裡我只是略略看,回頭認真看一波)
5.第5章:這章備受推崇,但是,我讀完了認為幾乎沒什麼收穫,說明標題黨還是有存在的理由:優化程式的效能
1)這裡主要提了把迴圈裡面一些東西挪到外面,比如for(int i = 0;i < strlen(s);++i),先算strlen,
2)消除不必要的儲存器引用,引入臨時變數儲存中間結果
3)迴圈解開,這個編譯器優化做了
深入理解計算機系統 第三章
1.假設過程p 呼叫者 呼叫過程q 被呼叫者 則q的引數放在p的棧幀中。2.另外,當p呼叫q時,p中的返回位址被壓入棧中,形成p的棧幀的末尾。3.返回位址就是當程式從q返回時應該繼續執行的地方。程式暫存器組是唯一能夠被所有過程共享的資源。雖然在給定時刻只能有乙個過程是活動的,但是我們必須保證當乙個過...
深入理解計算機系統 第三章 程式的機器級表示 2
迴圈 do while迴圈 dobody statement while test expr 這個迴圈的效果就是重複執行body statement,對於test expr求值,如果求值的結果為非零,就繼續迴圈。可以看到,body statement至少會執行一次。while迴圈 while tes...
深入理解計算機系統 第三版 第三章家庭作業答案
這章有的地方看第一遍的時候看的雲裡霧裡,看第二遍的時候才看明白。印象較深的是被呼叫者儲存暫存器,這部分內容看的得有3遍,沒看懂之前一直很迷,看懂之後只有兩個感覺 一是妙,二是簡單。這章內容,讓我知道了c語言的 是如何在機器上執行的,在此過程中,我突然很好奇編譯器如何把c原始碼翻譯為組合語言,以及如何...