计算机指令
在软硬件接口中,CPU 帮我们做了什么事?
- CPU 的全称是 Central Processing Unit,中文是中央处理器。
- 从硬件的角度来看,CPU 就是一个超大规模集成电路,通过电路实现了加法、乘法乃至各种各样的处理逻辑。
- 如果我们从软件工程师的角度来讲,CPU 就是一个执行各种计算机指令(Instruction Code)的逻辑机器。
- 这里的计算机指令,就好比一门 CPU 能够听得懂的语言,我们也可以把它叫作机器语言(Machine Language)。
- 一个计算机程序,不可能只有一条指令,而是由成千上万条指令组成的。
- 但是 CPU 里不能一直放着所有指令,所以计算机程序平时是存储在存储器中的。
- 这种程序指令存储在存储器里面的计算机,我们就叫作存储程序型计算机(Stored-program Computer)。
从编译到汇编,代码怎么变成机器码?
- 要让程序在一个 Linux 操作系统上跑起来,我们需要把整个程序翻译成汇编语言(ASM,Assembly Language)程序,这个过程我们一般叫编译(Compile)成汇编代码。
- 针对汇编代码,我们可以再用汇编器(Assembler)翻译成机器码(Machine Code)。这些机器码由“0”和“1”组成的机器语言表示。这一条条机器码,就是一条条的计算机指令。这样一串串的 16 进制数字,就是我们 CPU 能够真正认识的计算机指令。
- 一行 C 语言代码,有时候只对应一条机器码和汇编代码,有时候则是对应两条机器码和汇编代码。汇编代码和机器码之间是一一对应的。
解析指令和机器码
- 常见的指令可以分成五大类:
- 第一类是算术类指令。
- 第二类是数据传输类指令。给变量赋值、在内存里读写数据,用的都是数据传输类指令。
- 第三类是逻辑类指令。逻辑上的与或非,都是这一类指令。
- 第四类是条件分支类指令。
- 最后一类是无条件跳转指令。在调用函数的时候,其实就是发起了一个无条件跳转指令。