家庭作业(第二章、第三章、第七章、第八章)
第二章选题
2.58
int is_little_endian(){ int a = 1; return *((char*)&a); }
2.59
(x&0xFF) | (y&~0xFF)
第三章选题
3.55
解答:
算法思路如下: x的高32位为xh,低32位为xl。 y的符号位扩展成32位之后为ys(ys为0或者-1)。 dest_h = (xl*ys)_l + (xh*y)_l + (xl*y)_h dest_l = (xl*y)_l 因为所有的乘法都是unsigned*unsigned。即对于 1*(-1),如果存入两个寄存器中,那么高32位是0,低32位是-1。 相当于 1*(UNSIGNED_MAX)。
第七章选题
7.7
解答:
在double x前加上static。
7.9
解答:
p2中的main是弱符号,链接后的引用是foo6.c中的函数main。 main的第一个字节就是0x55(pushl %ebp),所以能打印出0x55。
8.13
->x=2
->x=4->x=3
满足这种拓扑即可。
8.16
输出counter = 2,因为全局变量也是复制的,而不是共享的。
8.18
画一下进程图就可以知道。
所以ACE是可能的。
参考文献:
《深入理解计算机系统》pdf
心得体会:第二章的题感觉比较容易, 第七章基础不扎实, 其实感觉第七章有点知识点感觉难以理解, 在同学的解释下, 略懂了点。