深入了解计算机系统CSAPPP练习题3.16
2017-10-24
CSAPP
exercise 3.16
已知下列C代码1
2
3
4void cond(long a, long *p) {
if (p && a > *p)
*p = a;
}1
2
3
4
5
6
7
8cond:
testq %rsi, %rsi
je .L1
cmpq %rdi, (%rsi)
jge .L1
movq %rdi, (%rsi)
.L1
rep; ret- 疑惑:
if (p && a > *p)为何会在汇编语言中产生cmpq %rdi, (%rsi)?p && a在汇编中为何没有反映出来 - 解答: 运算符的优先级在书中没有讲到,
>的优先级大于&&的优先级, 因此上面的代码片段应理解为:if (p && (a > *p)), 其中a > *p在cmpq %rdi, (%rsi)中反映出来. 而p && ()在汇编中等价于testq %rsi, %rsi je .L1 ..., 即当p不为空且a > *p不为零时, 执行cmpq %rdi, (%rsi)否则结束程序
- 疑惑: