已知下列C代码:
void cond(long a, long *p) { if (p && a > *p) *p = a; }
GCC会产生下面的汇编代码:
void cond(long a, long *p) a in %rdi, p in °/0rsi cond: testq %rsi,%rsi je .L1 cmpq %rdi,(%rsi) jge .L1 movq %rdi,(%rsi) .L: rep;ret
A. 按照图3-16b中所示的风格,用C语言写一个goto版本,执行同样的计算,并模拟汇编代码的控制流。像示例中那样给汇编代码加上注解可能会有所帮助。
请说明为什么C语言代码中只有一个if语句,而汇编代码包含两个条件分支。