作业4 3.24 1 2 3 4 5 6 7 8 long lopp_while (long a, long b) { long result = 1 ; while (a < b) { result = result * (a + b); a = a + 1 ; } }
3.25 1 2 3 4 5 6 7 8 long loop_while2 (long a, long b) { long result = b; while (b > 0 ) { result = result * a; b = b - a } }
3.28 A.
1 2 3 4 5 6 7 8 9 10 long fun_b (unsigned long x) { long val = 0 ; long i; for (i = 64 ; i != 0 ; i--) { val <<= 1 ; val |= (x & 1 ); x >>= 1 ; } return val; }
B. i
的初始值为64,一定满足 i != 0
,所以不必测试
C. 将 x 的各位做对称变换存在 val 中
3.30 A. -1 0 1 2 4 5 7 B. .L5 的标号为0和7
C. .L7 的标号为2和4
3.31 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 void switcher (long a, long b, long c, long *dest) { long val; switch (a) { case 5 : c = b ^ 15 ; case 0 : val = c + 112 ; break ; case 2 : case 7 : val = (b + c) << 2 ; break ; case 4 : val = a; break ; default : val = b; } *dest = val; }
3.64 A.
1 2 TYPE D[R][S][T] &D[i][j][k] = Xd + L(S*T*i + T*j + k)
B.
R = 7
S = 5
T = 13
3.67 A.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 104 +------------------+ | | · · · · · · | | 64 +------------------+ <-- %rdi | | 56 +------------------+ | | 48 +------------------+ | | 40 +------------------+ | | 32 +------------------+ | z | 24 +------------------+ | &z | 16 +------------------+ | y | 8 +------------------+ | x | 0 +------------------+ <-- %rsp
B. %rsp+64
C. 使用 %rsp
加偏移量的方式访问元素
D. 从参数 %res+64
开始存放 r 的字段
E.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 104 +------------------+ | | · · · · · · | | 88 +------------------+ | z | 80 +------------------+ | x | 72 +------------------+ | y | 64 +------------------+ <-- %rdi(eval传递的)(%rax(process返回的)) | | 56 +------------------+ | | 48 +------------------+ | | 40 +------------------+ | | 32 +------------------+ | z | 24 +------------------+ | &z | 16 +------------------+ | y | 8 +------------------+ | x | 0 +------------------+ <-- %rsp(eval函数) | | -8 +------------------+ <-- %rsp(process函数内)
F. 原函数将空间的地址作为参数传给被调用的函数,被调用的函数将数据存放在给定的空间内,返回该空间地址。
3.68 由 8(%rsi)
指向 q->t
可知,4 < B <= 8;
又由 32(%rsi)
指向 q->u
知,24 < 8 + 4 + A * 2 <= 32,即 5 < A <= 10
又 184(%rdi)
指向 p->y
知,176 < A*B*4 <= 184,即 44 < A*B <= 46
可得
A = 9
B = 5