将条件表达式和语句从c语言翻译成机器代码,最常用的方式是结合有条件和无条件跳转(这里只讨论有条件跳转)
对于大多数情况 汇编代码就是c语言的直接翻译
而c语言中的goto语句类似于汇编中的无条件跳转所以先看一下 if else 由goto语句完成
int absdiff(int x, int y)//返回两数差的绝对值
{
if(x<y)//测试x是否大于等于y如果是则跳转else
return y-x;
else
return x-y;//如果x大于等于y则x-y
}
goto函数的功能与上面的函数功能完全相同 (返回两数差的绝对值)
int gotodiff(int x, int y)
{
int result;
if(x>= y)//测试x是否大于等于y如果是则跳转
goto x_ge_y;
result = y-x;
goto done;
x_ge_y://如果x大于等于y则x-y
result = x - y;
done:
return result;
}
可以看到if else语句转为goto语句的直接翻译方式
t = test - expr;
if(!t)//c语言中真为非零 假为零
goto false;
then - statement
goto done;
false;
else - statement
done:
汇编中跳转转化为c