《深入理解計算機系統》練習錯誤記錄

2022-06-29 17:15:09 字數 635 閱讀 7557

第一行錯誤的原因,答案解釋是 cannot use %ebx as address register 。

參考資料: 

練習mov指令,熟悉資料強制型別轉換的操作。

當執行強制型別轉換既涉及大小變化又涉及c語言中符號變化時,操作應先改變大小。

符號變化指unsigned變化,大小變化指位元組大小變化。

第乙個是無符號數,第二個是有符號數,第乙個是一位元組,第二個是4字,根據上面的原則應該先改變大小,

movzbq (%rdi),%rax

movq %rax,(%rsi)

而答案是

movzbl(%rdi),%eax

movq %rax,(%rsi)

問了助教,說兩種都可以。網上有一種說法是,因為movzbl movzbq的效率不同,所以為了優化cpu效率,選擇了第二種答案。

《深入理解計算機系統》 練習題2 36答案

注意z1變數,是先進行型別轉換,然後再執行乘法,再會隱式地將y進行型別轉換,再繼續執行乘法。z2,z3變數都是一回事。注意z4變數,x y 這裡還是int型的,所以這裡正溢位,進行截斷,還是 2147483648。然後進行型別轉換,即進行位拓展,新拓展的位上的值都為1。此函式為初始版本,是用除法來檢...

《深入理解計算機系統》 練習題2 32答案

編寫函式tsub ok的 引數是x和y,執行的運算是x y,如果計算x y不產生溢位,函式就返回1.假設你寫的 如下 int tsub ok int x,int y int tadd ok int x,int y 此函式能檢測到兩個數相加,若發生溢位,則返回0,否則返回1。如果y的值為int min...

深入理解計算機系統

關鍵路徑是在迴圈的反覆執行中形成的資料相關鏈。迴圈展開是一種程式變換,通過增加每次迭代計算的元素的數量,減少迴圈的迭代次數。重新結合變換能夠減少計算中關鍵路徑上操作的數量,通過更好地利用功能單元的流水線能力得到更好的效能。浮點運算不保證是可結合的,通常迴圈展開和並行地累積在多個值中,是提高程式效能的...