由此我们组成一个简单的加法的操作指令,CPU拿到这个操作指令之后就可以进行寄存器的加法运算。
事实上除了上述的寄存器操作指令,CPU还支持其他控制指令和数据处理指令。以riscv的标准指令集为例,其分别有以下6种类型。
R-format for register-register arithmetic/logical operations
I-format for register-immediate arith/logical operations and loads
S-format for stores
B-format for branches
U-format for 20-bit upper immediate instructions
J-format for jumps
大部分我们SOC对寄存器,memory的访问,数据的处理可以分解成上述6种类型的指令。由于底层的机器指令晦涩难懂,在存储访问和数据处理的时候,人们更倾向于用高级语言C来进行描述。C又是如何最终转换成机器指令送给CPU的呢?这就要讲到编译的过程。