我们知道,现在指令集有CISC(复杂指令集)和RISC(精简指令集)。Windows只能跑在CISC上,而Linux即可以跑CISC,也可以跑RISC。
在CISC架构的CPU上,加法运算指令:
MUL ADDRA, ADDRB
这条指令可以将ADDRA和ADDRB中的数相乘并将结果储存在ADDRA中。其中将ADDRA, ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作全部依赖于CPU中设计的逻辑来实现。这种架构会增加CPU结构的复杂性和对CPU工艺的要求,但对于编译器的开发十分有利。比如上面的例子,C程序中的a*=b就可以直接编译为一条乘法指令。
RISC架构要求软件来指定各个操作步骤。上面的例子如果要在RISC架构上实现,将ADDRA, ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作都必须由软件来实现,即:
MOV A, ADDRA;
MOV B, ADDRB;
MUL A, B;
STR ADDRA, A。
这种架构可以降低CPU的复杂性以及允许在同样的工艺水平下生产出功能更强大的CPU,但对于编译器的设计有更高的要求。
所以,通过比较CISC和RISC的不同,我们能看出CPU指令集就是上面总结的:
(汇编 --> 机器码 的这种“翻译规则”) + (CPU执行机器码的逻辑电路) = 指令集。