C66x指令集(一)——指令集架构初探索

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haiyonghao/article/details/82812227

最近面试的时候被问到指令集,一头雾水,由于之前的工作没有涉及到指令集方面的知识,现总结成文。

定义

指令集架构(英语:Instruction Set Architecture,缩写为ISA),又称指令集或指令集体系,是计算机体系结构中与程序设计有关的部分,包含了基本数据类型指令集寄存器寻址模式存储体系中断异常处理以及外部I/O。指令集架构包含一系列的opcode即操作码(机器语言),以及由特定处理器执行的基本命令。(wiki定义

关于指令集的工作方式,知乎上有一个回答我觉得还可以,这里引用一下:
CPU的指令集存放在哪里?
其内容如下:

比如我们设计一套指令集,其中肯定有条加法指令。比如Add R1 R2 。我们可以认为这条指令的意思是计算寄存器R1中的内容和R2的和,然后把结果存到R1寄存器中。
那么经过编译后这条指令会变成二进制,比如010100010010 。这条二进制指令一共12位。明显可以分为三大部分。最前面的0101表示这是条加法指令,后面0001说的是第一个操作数是寄存器1,最后0010说的是第二个数就是寄存器2(其实实际没有这么简单的指令,至少应该区分操作数是寄存器还是直接的数据,但为了把这说的更容易理解作了简化)。我们可以通过十二根导线把这条指令输入一个CPU中。导线通电就是1,不通电就是0 。为了叙述方便我们从左到右用A0-A11给这12根导线编上号。
然后计算机会分析这条指令。步骤如下:
最开始的两根导线A0和A1,第一根有电第二根没电,就能知道这是一条运算指令(而非存储器操作或者跳转等指令)。那么指令将被送入逻辑运算单元(ALU)去进行计算。其实很简单。只要这两根线控制接下来那部分电路开关即可。
接下来的A2和A3,01表示加法,那么就走加法运算那部分电路,关闭减法等运算电路。
A4-A7将被送入寄存器电路,从中读取寄存器保存的值。送到ALU的第一个数据接口电路上。
后面的A8-A11同样被送入寄存器选择电路,接通R2寄存器,然后R2就把值送出来,放到ALU的第二个数据接口上。
ALU开始运算,把两个接口电路上的数据加起来,然后输出。
最后结果又被送回R1。
基本上简单的运算计算机就是这么操作的。他其实不知道你那些指令都是什么意思。具体的指令编程机器码后就会变成数字电路的开关信号。其中某几段会作为控制信号,控制其他部分的数据走不同的电路以执行运算。他没有一个地方保存着如何翻译这些机器码的字典,所有机器码的意义都被体现在整个电路的设计中了。
当然,从汇编到机器码这步是汇编程序翻译的。汇编程序当然知道某条指令要翻译成什么样的机器码。

所以指令集的目的就是为了实现底层操作,为每一种运算,每一种操作(如数据移动)提供相应的寄存器级别的动作,这些寄存器再和最底层的逻辑电路对应,最终完成顶层类似于"int a = 0; a = 1 + 2"的功能。

Reference:
[1] Wiki:指令集架构
[2] 知乎——CPU的指令集放在哪里?

猜你喜欢

转载自blog.csdn.net/haiyonghao/article/details/82812227
今日推荐