您的位置:首页 > 其它

对指令集的一点理解

2017-07-18 10:28 423 查看
指令集分两种:复杂指令集计算机(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硬件基本功能抽象出来成为指令,你高级语言需按照我的规则翻译成对应我这个指令集的汇编语言,汇编语言也要按照我的规则生成机器码。

错误的地方还请大家批评指正
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: