高级语言中的语句在汇编中是如何实现的
我们都知道对于c语言来说,它是需要先转换成汇编语言,然后再生成机器语言的。那么在c语言中,各种条件语句,各种表达式的计算,在汇编中是何如实现的呢?今天我们就来讲解一下。
汇编语言
汇编语言是由包含用助记符如 ADD、MOV、SUB 和 CALL 书写的语句。汇编语言与机器语言是一对一(one-to-one)的关系:每一条汇编语言指令对应一条机器语言指令。
因为汇编语言和机器语言是绑定的,而不同机器语言是不同的,因此,汇编语言是不可移植的,而高级语言是可移植的,这也是为什么人们更多地用高级语言来开发应用的一个原因。
跳转指令
跳转指令可以说是实现高级语言条件的核心,因为一切条件判断或者循环语句,底层都是通过跳转指令来实现的。
在汇编语言中,我们可以通过设置标号来实现语句的跳转,例如高级语言的if判断,在汇编语言中,就可以这样实现。


对于循环语句,其实也是一样的,也是通过跳转指令来实现。


在循环内部,EAX 是 val1 的代理(替代品),对 val1 的引用必须要通过 EAX。JNL 的使用意味着 val1 和 val2 是有符号整数。
逻辑判断的实现也是通过跳转指令来实现的,具体如下。


通过上面的例子我们可以看出,无论是怎样复杂的逻辑,无论是循环还是条件判断,在底层汇编层,其实都是通过跳转指令来实现的。
寄存器
我们都知道cpu本身只是用来计算的,它本身不保存数据,但是因为cpu运算速度过快,高于内存读取速度,因此cpu设计了寄存器用来保存临时数据,而读取它们的速度非常高效,大大提高了cpu的处理速度。

我们的高级语言转换成汇编语言的时候,可能一条语句就会变成多条语句,因此我们经常说c语言的语句不是原子的,因为它在汇编层可能会对应多条语句,而多条语句并行的时候就会产生执行顺序的问题,这也是并发产生的原因。
总结
无论是指令还是数据,都是通过寄存器来存储和读取的,正是有了寄存器,我们才可以非常方便地进行数据的累加,进行地址的变换,进行数据的查找。
我们经常说计算机只能识别01二进制数,是说cpu将二进制编码进行了存储和转换,当遇到特定的二进制,它就对应特定的操作。
原文链接:https://www.toutiao.com/a6903860166022791687/
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/jiaob/bcjs/9745.shtml
热门TAG
命令 权重 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 服务器 网站流量 实例解析 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows SEO优化 蜘蛛 搜索引擎 网站收录 JSP最新文章
-
初学者有效学习编码的3个
时间:2020-12-29
-
程序员如何避免陷入内卷
时间:2020-12-29
-
大牛用VScode写C/C++嘛?VS
时间:2020-12-29
-
改变我使用 Git 工作方式的
时间:2020-12-29
-
TIOBE12月榜单:Java重回第二
时间:2020-12-29
-
六种数据分析的基本可视
时间:2020-12-29
-
这5个开源和免费静态代码
时间:2020-12-29
-
7000字超多神器!腾讯设计
时间:2020-12-29
热门文章
-
20个有争议的编程观点
时间:2020-12-25
-
从0学ARM-汇编伪指令、LDS详解
时间:2020-12-26
-
你需要了解的几种微前端解决方案
时间:2020-12-27
-
2020年编程语言排行榜单年终大盘点
时间:2020-12-23
-
高级语言中的语句在汇编中是如何实现的
时间:2020-12-27
-
8 个让我更有效率的 Git 别名
时间:2020-12-27
-
一个高薪的码农,应具备的8种能力
时间:2020-12-25
-
大数据clouderaManager5.14.0离线部署
时间:2020-12-26
-
如何互联网没了女性的编程会怎样?
时间:2020-12-27
-
这5个开源和免费静态代码分析工具,你一
时间:2020-12-29
