CSAPP第三章作业题

来源:互联网 发布:ubuntu修改命令提示符 编辑:程序博客网 时间:2024/05/29 03:59

这一章读了蛮久,。, 中间又抽了点时间出去玩。
实验的部分,等读完整本书书之后再进行。本章课后习题,网上找不答案也是B了狗了。有几道题目,想了蛮久的。
3.59
x=xh264+xl
y=yh264+xl
xy=264(xhyl+xlyh)+xlyl
所以,
ph=xhyl+xlyh+xlyl/264
pl=xlylMOD264
注意:xhyhxlyl
ph进行化简:
yl=yy63264,xl=xx63264
代入后化简为ph=xhy+xyh+xlyl/264
现在解释部分汇编指令的含义:
cqto 对%rax进行符号扩展,符号位存在%rdx之中
指令 4、5获得x的符号位并存在于%rcx之中
指令6 、7和8实现xhyl+xlyh
mulq 单操作数实现了64位整数相乘,其高位存在于%rdx,低位存在于%rax

3.60
此题做出来的结果比较奇怪,不明白后面的代码时如何运行的:
第10行汇编中 salq %cl,%rdx
显然%rdx存了mask,%cl就是%rcx,而%rcx存了n,显然,只取%cl表示对n取模 即mask=mask<<(n%256),但是实际上根据之前的描述只会取(n%64)。部分存疑

3.61
此题很简单,只要稍微回顾下之前的知识即可。
代码如下:

movq $0 %raxtestq %rsi %rsije L1movq (%rsi) %rax.L1:req retz

3.62和3.63都是死脑筋,分清楚就好

3.64水题
add(A[i][j][k])=add(A)+sizeof(element)*(i*S*T+j*T+k);
S=5,T=13,R=7
R的计算则根据return sizeof(A)

3.67
懒得画图,
注意在eval过程之中使用了call prcess指令,这意味着压栈命令,%rsp+=8;
唯一的感受就是:谁使用谁分配内存,至于赋值的部分则交给了子程序。

3.68
这里涉及到对齐的问题,
第二条指令,不见得B=8,其实只需要B>4由于对齐的问题,就会空出相应的空间。显然,根据short s[A],A占据了剩余的20Byte
而第4条指令,则暗指int x[A][B]的空间大小为184Byte。 但是这部绝对,因为如果x占了180Byte, 则会空出4Byte来对齐 long y;
8>=B>4
10>=A>8
46>=AB>=45
显然B=5,A=9;

3.69
没做出来,懒得再分析了 有空回来二刷习题的时候慢慢研究(。,。)

3.70
这题感觉是非常简单的。
算一算,显然只需要16Byte即可。
第二条指令 movq 8(%rsi) %rax 访问指针 %rax=M(up+8)=up->next
第三条指令 %rdx=*(up->next)=up->next->p;
第四条指令 %rdx=*p;
所以
up->x=*(up->next->p)-up->next->y

0 0
原创粉丝点击