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

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

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

文章插图
 

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

文章插图
 
对于循环语句 , 其实也是一样的 , 也是通过跳转指令来实现 。
高级语言中的语句在汇编中是如何实现的

文章插图
 

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

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

文章插图
 

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

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

文章插图
 
我们的高级语言转换成汇编语言的时候 , 可能一条语句就会变成多条语句 , 因此我们经常说c语言的语句不是原子的 , 因为它在汇编层可能会对应多条语句 , 而多条语句并行的时候就会产生执行顺序的问题 , 这也是并发产生的原因 。
总结无论是指令还是数据 , 都是通过寄存器来存储和读取的 , 正是有了寄存器 , 我们才可以非常方便地进行数据的累加 , 进行地址的变换 , 进行数据的查找 。
我们经常说计算机只能识别01二进制数 , 是说cpu将二进制编码进行了存储和转换 , 当遇到特定的二进制 , 它就对应特定的操作 。

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


    推荐阅读