计算机指令
CPU就是一个执行各种计算机指令的机器。计算机指令,就好比CPU能够听懂的语言,我们也可以把它叫做机器语言。
不同的CPU能听懂的语言不一样。比如我们的个人电脑用的是Intel的CPU,苹果手机用的是ARM的CPU。这两者能听懂的指令就不一样。CPU能够支持的语言就是计算机指令集(Instruction Set)。
现代代码如何变成机器码
首先我们的代码要编译(Compile)成汇编代码(ASM,Assembly Language)。汇编代码再用汇编器(Assembler)翻译成机器码(Machine Code)。机器码就是由0和1组成的机器语言表示。机器码就是一条条计算机指令。
解析计算机指令和机器码
常见的指令可以分为五大类:
1.算术类指令。加减乘除。
2.数据传输类指令。给变量赋值,在内存里读写数据。
3.逻辑类指令。逻辑上的与或非。
4.条件分支类指令。“if/else”。
5.无条件跳转指令。
汇编器如何把对应的汇编代码翻译成机器码?
不同的CPU有不同的指令集,也就对应着不同的汇编语言和不同的机器码。我们来看看最简单的MIPS指令集。
MIPS的指令是一个32位的整数,高6位叫操作码,代表这条指令具体是个什么样的指令。
R指令一般做算术和逻辑操作,rs代表第一个寄存器的地址,rt代表第二个寄存器的地址,rd代表目标的临时寄存器的地址。如果是逻辑位移操作,有位移操作的位移量。最后的功能码就是前面操作码不够的时候,扩展操作码用的。
I指令通常用在数据传输、条件分支,以及在运算的时候使用的并非变量还是常数的时候。
J指令就是一个跳转指令。
add %t0,$s2,%s1
以上汇编代码对应MIPS指令里opcode是0,rs代表第一个寄存器s1的地址17,rt代表第二个寄存器s2的地址18,rd代表目标的临时寄存器t0的地址8。不是位移操作,所以位移量是0。把这些数字拼在一起,就变成了MIPS的加法指令。