对指令集的一点理解

指令集分两种:复杂指令集计算机(Complex Instruction Set Computer CISC)、精简指令集计算机(Reduced Instruction Set Computer RISC)。复杂指令集包含应用程序中不经常使用的特定指令;而精简指令集只包括程序中经常使用的指令,特殊操做以子程序的方式实现。
CISC的表明就是X86架构的CPU,RISC的CPU包括:ARM、PowerPC等。
指令集能够理解成一种规范:(汇编 –> 机器码 的这种“翻译规则”) + (CPU执行机器码的逻辑电路) = 指令集。指令集中的每一条指令对应着一条汇编指令和固定的实现电路。芯片内部其实都是电路,指令集只不过是对这些电路的功能进行抽象,而后对上层表现指令。故在同等制造水平上相比较复杂指令集来讲,精简指令集能够简化处理器的结构,能够设计功能更复杂的CPU。
例如:
在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,但对于编译器的设计有更高的要求。
上例转自知乎。
总结:程序语言最后生成机器码的过程(以C为例):C源程序在各个CPU都是兼容的,C语言先通过编译翻译成汇编语言,而汇编语言和CPU就相关了,汇编语言就是由指令集中的指令组成,不一样的CPU架构对应的指令集不一样,于是编译后的汇编程序就不一样。编译这个过程由编译器完成,因此不一样的硬件平台编译器有差异,也如上例所说CISC的编译器开发比RISC相对简单一点。汇编语言再通过汇编后编程机器语言,机器语言是CPU能够执行的。简单点说:机器语言其实就是各类0/1信号,它输入到CPU内部的逻辑电路,通过逻辑电路处理后的结果就是输出。因此指令集就是一种规则,把个人CPU硬件基本功能抽象出来成为指令,你高级语言需按照个人规则翻译成对应我这个指令集的汇编语言,汇编语言也要按照个人规则生成机器码。web

错误的地方还请你们批评指正编程