汇编语言跳转翻译为c语言if else语句
来源:互联网 发布:卖家怎么防止淘宝客 编辑:程序博客网 时间:2024/06/05 16:04
将条件表达式和语句从c语言翻译成机器代码,最常用的方式是结合有条件和无条件跳转(这里只讨论有条件跳转)
对于大多数情况 汇编代码就是c语言的直接翻译
而c语言中的goto语句类似于汇编中的无条件跳转所以先看一下 if else 由goto语句完成
int absdiff(int x, int y)//返回两数差的绝对值{if(x<y)//测试x是否大于等于y如果是则跳转elsereturn y-x;elsereturn 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-yresult = 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语句此处使用ATT代码格式(取自深入理解计算机系统)
x位于%ebp+8 y位于%ebp+12
movl 8(%ebp), %eaxmovl 12(%ebp), %edx
cmpl $-3, %eax//x - (-3)操作同sub指令相同但是无目的操作数jge .L2//如果x 大于等于-3则跳转至标记 L2cmpl %edx, %eax//比较x yjle .L3//如果x小于等于y则跳转至L3imull %edx, %eax//如果x大于y则执行此处并跳转至L4jmp .L4//直接跳转不需要条件.L3:leal (%eax, %edx), %eax//此处x小于等于y则 x+y将结果保存到val中
jmp .L4
.L2://x大于等于-3cmpl $2, %eaxjg .L5//如果x大于2执行此处xorl %edx, %eax//当前面所有条件都不满足时执行 也就是最开始的赋值jmp .L4.L5://由前面执行时是个跳转 到达标记L5subl %edx, %eax.L4:
c代码
int test(int x, int y){int val = x^y;//所有条件不满足 if(x<-3)//如果x>=-3则不满足条件发生跳转{if(y<x)//如果y>=x则达到elseval = x*y;elseval = x + y;}else if(x > 2)//x>2满足条件则执行此处跳转val = x -y;return val;//返回val值}
阅读全文
0 0
- 汇编语言跳转翻译为c语言if else语句
- C语言if else语句
- c语言if else语句
- 51 C语言if else语句
- 【C语言】if else
- C语言分支结构语句if-else语句
- C#if/if-else/if-else-if语句
- C语言 初级练习(if-else语句篇)
- C语言之选择流程语句:if--else
- C语言(11)------选择结构if-else语句
- C语言条件运算符与if-else语句
- C语言——if-else语句嵌套
- 自制编程语言CXScript(三) 如何实现if语句、else语句并实现分支跳转
- c语言:不用if,else语句,也不用循环条件等,输入一个字符,判断是否为大写字母
- java开发编译器:C语言逻辑控制语句if else if 的语法解析
- IF-ELSE IF-ELSE语句
- C语言基础 if,else if,else优秀格式
- go语言示例:if/else语句
- HDU 5873 Football Games (公式题)
- Android 8.0 功能和 API
- Oracle的多版本控制小实验
- 八大排序算法
- HDU2101 A + B Problem Too【水题】
- 汇编语言跳转翻译为c语言if else语句
- react native 添加自定义字体
- oracle11g简单的物理全备份和恢复
- UVALive-7297-Hounded by Indecision
- FSL安装教程
- 数据挖掘的流程----自己认为是最规范的
- PAT 1068. Find More Coins (30) DFS,01背包
- toolbar详解
- bootstrapValidator表单验证使用方法