深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

深入,并且广泛
				-沉默犀牛

之前整理了第二张的习题,没想到访问量挺高的,看来还是有人需要习题和答案的,以后每看完一章书,就会对应的整理出那一章的习题。


如果看完答案觉得不同,请看我的“深入理解计算机系统_第一部分_第三章_程序的机器级表示” 其中对这一章都进行了详细的介绍

1.熟悉操作数的类型

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

2.这个练习题要看上面的各个寄存器的字节数

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
[看答案介绍内存引用总是用四字长寄存器给出,选择数据传送指令的时候就看另一个操作数好了。]

3.熟悉数据传送指令 movq深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

4.熟悉数据传送指令,注意 * 符号是取出地址里的数深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

我把每种数据类型的占用的字节数再贴一下:
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

5. 再次熟悉指针和movq指令深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

6.熟悉 leaq 进行的简单算术运算

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

7.熟悉 leaq 进行的简单算术运算

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

8.熟悉二操作数指令

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

9.熟悉移位操作

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

10.熟悉 xorq 指令

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

11.熟悉 divq 指令

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

12.熟悉条件码跳转指令 set

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

13. 熟悉测试指令 test

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

14.注意这里的D答案,0xffffff73 + 0x004005ed = 0x100400560 截断后为 0x00400560

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

15.下三题都是熟悉 if 语句条件控制汇编实现

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

16.

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

17.

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
【小提示:可能你没能一次记住跳转指令的条件,本题目中的 jge 是 “大于等于”则跳转】
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

18.下两题是熟悉 if 语句条件传送的汇编实现,注意与上面的条件控制区别开,上面是判断后再计算,这里是先把两个结果都计算出来,然后判断输出哪个。因为现在处理机流水线的设计原因,这个方法在适用的时候会更高效。

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
【小提示:cmovns 的传送条件为 非负数(通过判断 SF 的值),之前的 testq 会影响 SF 的值】
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
【我不知道为啥 “负数要加偏移量” 】

19.

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

20.熟悉 do-while 循环的汇编实现

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

21.下两题熟悉 while 循环的汇编实现,前者用了 guarded-do 模式翻译,后者用了跳转到中间模式翻译,注意看汇编代码区别二者的不同。前者是首先判断循环条件,不成功直接跳到结尾;后者是无条件跳到循环内,然后再判断条件。

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

22.

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

23.熟悉 for 循环的汇编实现,要先把 for 循环变成 while 循环。

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

24.有 continue 的 for 循环 的汇编实现

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

25.下两题熟悉 switch 语句的汇编实现,注意分析跳转表

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

26.

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

27.理解 运行时栈

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

28.比较综合的习题了,判断参数合法顺序和类型

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

29.熟悉栈和寄存器的数据传送

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

30.熟悉递归过程的汇编实现

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

31.熟悉数组大小和地址

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

32.熟悉数组的引用

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

33.熟悉多维数组的汇编实现

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

34.熟悉 struct 的字段偏移和大小

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

35.练习****(从汇编到原C函数)

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

36.熟悉 union 的用法 ,注意区别和 struct 的不同。前者是对同样一段内存的不同方式解读。

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

37.熟悉 struct 的数据对齐

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

38.再多练习一下 对于 struct 的成员重排问题,根据数据对齐要求

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

39.内存越界引用的问题

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

40.缓冲区溢出攻击问题【这个题我有点不懂:栈随机化怎么实现的?】

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示

41.栈破坏检测问题,注意金丝雀值

深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示
深入理解计算机系统[习题]_第一部分_第三章_程序的机器级表示