第二章选题
2.61
解答:
A. !~x B. !x C. !~(x>>((sizeof(int)-1)<<3)) D. !(x&0xFF)
2.81
解答:
A. 错误,当x=0,y=TMin时,x > y,而-y依然是Tmin,所以-x > -y。 B. 正确,补码的加减乘和顺序无关(右移除外)。 C. 错误,当x=-1, y=1时,~x + ~y = 0xFFFFFFFE,而~(x+y) == 0xFFFFFFFF。 D. 正确,无符号和有符号数的位级表示是相同的。 E. 正确,最后一个bit清0,对于偶数是不变的,对于奇数相当于-1,而TMin是偶数,因此该减法不存在溢出情况。所以左边总是<=x。
第三章选题
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.10
解答:
A. gcc p.o libx.a p.o B. gcc p.o libx.a liby.a libx.a C. gcc p.o liby.a libx.a liby.a libz.a
7.12
行号 |
运行时存储器地址 |
值 |
15(bufp0) |
0x080483CB |
0x0804945C |
16(buf[1]) |
0x080483D0 |
0x08049458 |
18(bufp1) |
0x080483D8 |
0x08049548 |
18(buf[1]) |
0x080483DC |
0x08049458 |
23(bufp1) |
0x080483E7 |
0x08049548 |
心得:
这一阶段的作业都是课本知识的延伸或者是和课后练习题一样的原理。我做起来有的比较熟悉,比较得心应手。但也有一些发现题目完全没有做过,很生疏。我想有一些原因是因为我有的知识学过就忘了,或者是根本没有学到点子上,只是皮毛的学习。例如我为了每周三的小测会把老师所画的重点题型做会。但是仍然只是会计算而不清楚原理。我觉得应该要花时间去体会第二章中数的原理。而不是局限于应试。这本书有的地方的讲解让我对以前汇编或者计算机导论中的认识有了更根本的认识,我觉得很好很清晰。因此有些不懂的地方还是很值得去理解得,我相信理解了以后会有拨云见日的感觉。
第六章选题
6.42
解答:
每行有4个字节,在循环中,后三个命中,第一个不命中,不命中率就是四分之一。
第八章选题
8.10
解答:
A. 调用一次,返回两次: fork B. 调用一次,从不返回: execve, longjmp C. 调用一次,返回一次或者多次: setjmp
8.16
解答:
输出counter = 2,因为全局变量也是复制的,而不是共享的。
8.18
解答:
ACE是可能的。如下图进程:
参考文献:
《深入理解计算机系统》pdf
搭档:
(习题一起选,做题分开做,写作业时互相督促学习讨论)
20135322郑伟
链接:http://www.cnblogs.com/zhengwei0712/