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


Errata for CS:APP3e and its Instructors Manual

http://csapp.cs.cmu.edu/3e/errata.html


 

習題3.3

 

 

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

解釋是:從后面幾行可以看出來,這是一台64位機器。當你知道你的地址在32位范圍內時,在64位機器上使用32位寄存器尋址是可以的。但通常情況下,堆棧不是,因此(%ebx)是危險的。

參考資料: https://stackoverflow.com/questions/31633075/error-moving-a-constant-byte-value-into-ebx

 


 

習題3.4 

練習mov指令,熟悉數據強制類型轉換的操作。

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

符號變化指unsigned變化,大小變化指字節大小變化。

unsigned char -> long

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

movzbq (%rdi),%rax movq %rax,(%rsi)

而答案是

movzbl(%rdi),%eax movq %rax,(%rsi)

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM