《深入理解计算机系统》练习错误记录


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-2025 CODEPRJ.COM