要清楚这个问题,就必须先了解什么是计算机指令。
如上图,每条指令都包含操作码和操作数两部分。
以 MOV AX , 3050H 指令为例:
指令操作码和操作数
这条指令中,MOV是操作码,对应十六进制数1000H,操作数是3050H。
这条指令的目的是把数字3050H存放到寄存器AX中。
AX是一个十六位寄存器。下图是一个一位寄存器电路,也就是说,AX由类似的十六个这样的电路构成。
一位寄存器电路
指令中的3050H是一个十六位的二进制数字,下图电路用来保存一位二进制数字,同样,3050H这个数字需要十六个这样的电路构成。
一位二进制数字保存电路
而MOV这个指令本身对应的操作码1000H需要一个指令译码器来完成,下图是示意图。
指令执行示意图
假设操作码1000H由译码器的输入端A,B,C,D,......输入,译码器的输出端Y1,Y2,Y3,........右边连接着保存数字3050H的电路,左边连接着AX这个寄存器电路,那么,当把操作码1000H输入译码器输入端以后,3050H这个数字就会被存入AX寄存器中。不同的操作码对应于不同的指令,要实现这个目的,整个计算机指令执行和控制电路就必须有一个整体上的设计思想。
铁路控制台
上面指令执行的原理和我们常常看到的各种控制台相似。例如火车站控制台,按下某些按钮之后,就可以实现某些铁轨的转向、并轨功能。
铁轨
从上述叙述中可以看出,指令是通过对于已经设计好的电路进行不同的操作实现的,所以指令集本身无法存储,硬要说存储的话,指令集就存储在已经设计好的计算机CPU里面的控制器的电路中。
我们常数的指令集架构,指的是计算机中央处理器机器码所使用的指令的集合以及其背后的寄存器体系、总线设计等逻辑框架,其实就是这个指令集对应的总体电路设计思想。
我们知道,华为海思所设计的芯片目前来说都是基于arm的公版架构而来,其实就是指海思所设计的芯片采用了ARM芯片的整体电路设计思想。
,