汇编语言中循环语句的实现
来源:互联网 发布:matlab fprintf 矩阵 编辑:程序博客网 时间:2024/06/06 04:24
一、概述
C语言中有许多不同的结构,比如if-else、do-while、while、for、swich等等,这些结构的汇编实现都是一层一层在前者的基础上进行构建的。比如if-else是基于jmp命令实现的,do-while是基于if-else的汇编结构的,而while又是基于do-while的。所以说jmp在汇编中有着特别重要的作用,它是实现多种C语言结构的基础。
if-else依赖于跳转指令;
do-while循环先被转换为if-else,然后再进行翻译,其中使用较多的是比较命令cmp和条件跳转指令;
while循环先被转化为 if 和 do-while的结合体,然后再分别进行翻译;
for循环与while循环非常类似,仅是多了一个赋值语句而已,翻译过程与while类似,但要注意continue的处理,谨防处理不当而使得语句陷入死循环。
二、jmp命令
三、if-else的汇编语言形式
.
四、do-while的汇编形式
大多数汇编器根据一个循环的do-while形式来产生循环代码,其他的循环会首先转换成do-while形式,然后再进行编译,所以do-while循环是所有循环结构的基础。它的汇编翻译如下形式
五、while循环
将while循环翻译成机器代码有很多种方法,一种常见的方法,也是GCC采用的方法,是使用条件分支,在需要时省略循环体的每一次执行,从而将代码转换成do-while循环,具体实例如下:
六、 for循环
首先可以将for循环转换为while循环,然后再按照上面的方法,最终完成for循环到机器代码的转换。但在这里需要特别注意的是,当循环中出现有continue时,一定要注意控制变量的自增或自减操作,否则会导致无限循环。
比如将如下C语句代码翻译成机器语言:
int sum = 0;
int i;
for(i = ; i < 10; i++){
if (i & 1)
continue;
sum += i;
}
如果按照如下的方式进行转换的话,continue语句会阻止索引变量i被修改,导致代码无限循环:
int sum = 0;
int i = 0;
while (i < 10)}
if (i & 1)
continue;
sum += i;
i++;
}
所以,正确的翻译方法为:
int sum = 0;
int i = 0;
while (i < 10)}
if (i & 1)
goto update;
sum += i;
update:
i++;
}
- 汇编语言中循环语句的实现
- C语言switch语句的汇编语言实现
- C语言switch语句的汇编语言实现
- C语言switch语句的汇编语言实现
- for循环语句的头部执行顺序--汇编语言分析
- Flex中循环语句实现
- for语句实现循环的执行过程
- 汇编语言源程序语句的格式
- 汇编语言学习系列 for循环实现
- C ++ 中 的 for 循环语句
- C语言中循环语句的使用
- Oracle中循环语句的触发器
- java中循环语句的理解
- Java学习中循环语句的学习
- Java中功能强大的循环语句
- foreach语句实现循环
- struts2中实现for语句循环输出树前的不同字数空格
- SQL中循环语句
- android OkHttp 上传文件附带参数
- MPNowPlayingInfoCenter使用注意
- 上传本地项目到github图文详解
- 反转链表
- java数组 学习总结
- 汇编语言中循环语句的实现
- Java获取本机IP地址方法。
- android插件化学习笔记(前篇)
- 百度ueditor 视频编辑问题以及图片跟视频居中报错问题解决
- HtmlAgilityPack 总结(一)
- Retrofit网络请求入门
- windows命令
- 泪如米兰 白发银沙
- theano学习-Convolutional Neural Networks (LeNet)