高级语言中的语句在汇编中是如何实现的

开发 后端
我们都知道对于c语言来说,它是需要先转换成汇编语言,然后再生成机器语言的。那么在c语言中,各种条件语句,各种表达式的计算,在汇编中是何如实现的呢?今天我们就来讲解一下。

 我们都知道对于c语言来说,它是需要先转换成汇编语言,然后再生成机器语言的。那么在c语言中,各种条件语句,各种表达式的计算,在汇编中是何如实现的呢?今天我们就来讲解一下。

[[356541]]

汇编语言

汇编语言是由包含用助记符如 ADD、MOV、SUB 和 CALL 书写的语句。汇编语言与机器语言是一对一(one-to-one)的关系:每一条汇编语言指令对应一条机器语言指令。

因为汇编语言和机器语言是绑定的,而不同机器语言是不同的,因此,汇编语言是不可移植的,而高级语言是可移植的,这也是为什么人们更多地用高级语言来开发应用的一个原因。

跳转指令

跳转指令可以说是实现高级语言条件的核心,因为一切条件判断或者循环语句,底层都是通过跳转指令来实现的。

在汇编语言中,我们可以通过设置标号来实现语句的跳转,例如高级语言的if判断,在汇编语言中,就可以这样实现。

 

高级语言中的语句在汇编中是如何实现的

 

 

高级语言中的语句在汇编中是如何实现的

 

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

 

高级语言中的语句在汇编中是如何实现的

 

 

高级语言中的语句在汇编中是如何实现的

 

在循环内部,EAX 是 val1 的代理(替代品),对 val1 的引用必须要通过 EAX。JNL 的使用意味着 val1 和 val2 是有符号整数。

逻辑判断的实现也是通过跳转指令来实现的,具体如下。

 

高级语言中的语句在汇编中是如何实现的

 

 

高级语言中的语句在汇编中是如何实现的

 

通过上面的例子我们可以看出,无论是怎样复杂的逻辑,无论是循环还是条件判断,在底层汇编层,其实都是通过跳转指令来实现的。

寄存器

我们都知道cpu本身只是用来计算的,它本身不保存数据,但是因为cpu运算速度过快,高于内存读取速度,因此cpu设计了寄存器用来保存临时数据,而读取它们的速度非常高效,大大提高了cpu的处理速度。

 

高级语言中的语句在汇编中是如何实现的

 

我们的高级语言转换成汇编语言的时候,可能一条语句就会变成多条语句,因此我们经常说c语言的语句不是原子的,因为它在汇编层可能会对应多条语句,而多条语句并行的时候就会产生执行顺序的问题,这也是并发产生的原因。

总结

无论是指令还是数据,都是通过寄存器来存储和读取的,正是有了寄存器,我们才可以非常方便地进行数据的累加,进行地址的变换,进行数据的查找。

我们经常说计算机只能识别01二进制数,是说cpu将二进制编码进行了存储和转换,当遇到特定的二进制,它就对应特定的操作。

责任编辑:华轩 来源: 今日头条
相关推荐

2014-04-09 09:32:24

Go并发

2022-04-10 23:42:33

MySQLSQL数据库

2011-01-04 17:08:10

汇编语言

2011-12-25 15:35:05

ibmdwJavaC++

2010-03-11 19:16:32

Python语言

2024-05-10 08:36:40

Go语言对象

2010-01-11 15:29:13

引用C++语言

2023-01-12 08:52:50

GoroutinesGo语言

2022-09-27 08:01:48

递归函数GScript

2011-01-14 14:08:17

Linux汇编语言

2011-05-25 13:22:05

PHPJSON

2024-12-17 16:26:31

2019-08-15 16:30:49

TomcatSpringBootJava

2020-08-12 08:51:19

Go语言Concurrency后台

2024-01-29 00:57:20

GuavaJava拷贝

2019-12-09 15:08:30

JavaTomcatWeb

2024-04-07 11:33:02

Go逃逸分析

2021-07-15 23:18:48

Go语言并发

2009-07-08 12:43:59

Scala ServlScala语言

2023-12-21 07:09:32

Go语言任务
点赞
收藏

51CTO技术栈公众号