揭秘代码是如何变成机器码的

1 重新审视 CPU

之前从硬件的角度来看,CPU 就是一个超大规模集成电路,通过电路实现了至各种各样的处理逻辑。

如果从软件的角度来讲,CPU 就是一个执行各种计算机指令(Instruction Code)的逻辑机器。这里的计算机指令,就好比一门 CPU 能够听得懂的语言,我们也可以把它叫作机器语言(Machine Language)。

类比人类社会,不同的国家使用的语言可能是不一样的,不同的 CPU 能够听懂的语言也不太一样。例如,个人电脑用的是 Intel 的 CPU,苹果手机用的是 ARM 的 CPU。这两者能听懂的语言就不太一样。类似这样两种 CPU 各自支持的语言,就是两组不同的计算机指令集(Instruction Set)。

不同的指令集意味着在电脑上运行的程序,复制之后装到到手机上是不能运行的。

2 计算机指令集与存储程序型计算机

常见的计算机指令可以分为:

第一类是算术类指令。我们日常的四则运算,在 CPU 层面,都会变成一条条算术类指令。

第二类是数据传输类指令。给变量赋值、在内存里读写数据,用的都是数据传输类指令。

第三类是逻辑类指令。逻辑上的与或非,都是这一类指令。

第四类是条件分支类指令。日常我们写的“if/else”,其实都是条件分支类指令。

最后一类是无条件跳转指令。在大型程序中,我们通常会定义一些函数或者方法。在调用函数的时候,其实就是发起了一个无条件跳转指令。

一个计算机程序,是由成千上万条指令组成的。由于CPU容量有限,不能一直存放着所有指令,所以计算机程序平时是存储在存储器中的。这种程序指令存储在存储器里面的计算机,叫做存储程序型计算机

3 代码是怎么变成机器码的

以一个 C 语言程序为例:在程序中定义了两个变量 a、b,分别赋值 1、2,然后再将 a、b 相加,重新赋值给 a。
请添加图片描述

要让这段程序跑起来,我们需要把整个程序翻译成一个汇编语言(ASM,Assembly Language)的程序,这个过程我们一般叫编译(Compile)成汇编代码。

针对汇编代码,我们可以再用汇编器(Assembler)翻译成机器码(Machine Code)。这些机器码由“0”和“1”组成的机器语言表示。这一条条机器码,就是一条条的计算机指令。这样一串串的 16 进制数字,就是我们 CPU 能够真正认识的计算机指令
请添加图片描述

除了 C 语言,Python 和 Java 也需要把写好的代码,转换成 CPU 能够理解的机器码才可以执行的。Python 是解释型语言,是通过解释器在程序运行的时候逐句翻译,而 Java 是通过虚拟机对编译出来的中间代码进行解释,或者即时编译成为机器码来最终执行。这个在后续加个餐。

3 常用汇编语言指令分类整理(建议收藏备用)

上面提到了汇编语言,这里补充一些汇编语言指令,方便阅读汇编代码。

目前大家开发程序使用的都是高级语言,对于汇编语言其实没有必要投入太多,做到大概能看懂就行。

常用的汇编语言指令分为:

  1. 数据传送与数据运算指令
    请添加图片描述

  2. 位运算指令
    请添加图片描述

  3. 条件分支指令
    在这里插入图片描述

  4. 函数调用指令
    在这里插入图片描述

  5. 字符串处理指令
    在这里插入图片描述

  6. 其他指令:输入输出、控制器指令、系统交互指令
    在这里插入图片描述

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

James Shangguan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值