首页 > 试题广场 >

已知下列C代码: void cond(long a, lo

[问答题]

已知下列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语句,而汇编代码包含两个条件分支。

这道题你会答吗?花几分钟告诉大家答案吧!