我们都知道对于C语言来说,需要先转成汇编语言,再生成机器语言。那么在C语言中,各种条件语句和各种表达式的计算是如何用汇编实现的呢?今天就来解释一下。汇编语言汇编语言由使用ADD、MOV、SUB和CALL等助记符编写的语句组成。汇编语言和机器语言是一对一的关系:每条汇编语言指令对应一条机器语言指令。因为汇编语言和机器语言是绑定的,不同的机器语言又不一样,汇编语言是不可移??植的,而高级语言是可移植的,这也是为什么人们多使用高级语言来开发应用程序的一个原因。跳转指令跳转指令可以说是高级语言条件的核心,因为所有的条件判断或者循环语句都是在最底层由跳转指令实现的。在汇编语言中,我们可以通过设置标签来实现语句的跳转,比如高级语言的if判断,在汇编语言中,就可以这样实现。对于循环语句,其实也是一样的,也是通过跳转指令来实现的。在循环内部,EAX是val1的代理(替代),对val1的引用必须通过EAX。使用JNL意味着val1和val2是有符号整数。逻辑判断的实现也是通过跳转指令实现的,如下。从上面的例子我们可以看出,无论多么复杂的逻辑,无论是循环还是条件判断,其实都是在底层的汇编层通过跳转指令实现的。我们都知道cpu本身只是用来计算的,并不保存数据,但是因为cpu运算速度太快,高于内存读取速度,所以cpu设计了寄存器来保存临时数据,速度ofreadingthem非常高效,大大提高了cpu的处理速度。当我们的高级语言转换成汇编语言的时候,一条语句可能变成多条语句,所以我们常说C语言的语句不是原子的,因为在汇编层可能对应多条语句,多条语句运行时并行的话,会有执行顺序的问题,这也是并发的原因。总结指令和数据都是通过寄存器存储和读取的。正是有了寄存器,我们才能方便地进行数据的积累、地址的转换、数据的查找。我们常说计算机只能识别01位的二进制数,意思就是CPU存储和转换二进制码。遇到具体的二进制数,就对应具体的操作。
