对于一个8位CPU来说,指令可以分为两大类,一类为ALU相关指令,主要包括需要ALU参与完成的相关指令,比如加法、移位、比较等;另一类是非ALU相关指令,比如加载数据,存储数据,跳转等。

无论哪种指令,都可以分为前4位后4位前四位和动作有关,后四位和数据有关

我们先说ALU相关指令,其基本定义如下:

针脚型cpu的性能指标(CPU系列-ALU指令编码及解析)(1)

最高位1表示该条指令为ALU指令,接下来三位为操作码,表示ALU要干的具体工作;后四位的前两位和后两位表示ALU运算所需要的数据所在寄存器的编码,具体定义如上图所示。

比如,有一条ALU(1)指令执行加法(000)运算,被加的内容是Resister 2(10)里的数据与Resister 3(11)的数据,结果存放在Resister 3(11)里面,那么它对应的指令就是:

针脚型cpu的性能指标(CPU系列-ALU指令编码及解析)(2)

如果把这条指令(1000 1011)存入RAM中,地址为10,那么当IAR设为10时,开启计算机,它就会从IAR为10的RAM中读取该条指令,通过总线传输至IR,然后在Control Section的控制下,去计算R2R3之和。

如果ALU指令是单输入指令,比如SHL,SHR或者NOT,数据内容将来自Reg A,经过ALU运算,结果会被存在Reg B中。可以选在从一个寄存器取数,结果存到另外一个寄存器,比如R1→R3;可以选在从一个寄存器取数,结果存到同一个寄存器,比如R2→R2。

如果ALU指令是双输入指令,Reg A和Reg B将会被送到ALU,运算结果送到Reg B,Reg A和Reg B可以是同一个寄存器。

通过以上分析我们知道,ALU面对的是两个输入:Reg A和Reg B。Reg A和Reg B的逻辑相对是比较明确的,那就是Reg A (ALU) Reg B→Reg B,Reg A和Reg B经过ALU运算,结果存在Reg B里面,具体实现方式如下:

针脚型cpu的性能指标(CPU系列-ALU指令编码及解析)(3)

数据流总结如下:

针脚型cpu的性能指标(CPU系列-ALU指令编码及解析)(4)

Step 4:“读”和“写”使能端有两个条件:指令寄存器IR最高位为1,Stepper 4的clk信号为高;通过控制“读”“写”两个信号,实现Reg B的内容加载到TMP里面;

Step 5:“读”和“写”使能端有两个条件:指令寄存器IR最高位为1,Stepper 5的clk信号为高,实现Reg B的内容加上TMP里面存的Reg A,结果传输至Reg B;Stepper 5的clk信号还作为ALU操作码产生信号的控制,也就是说,只有在step 5才产生非000的ALU操作码。

Step 6:只要不是比较运算(操作码111),都要将ACC的计算计算结果存储至Reg B。

可见,对于ALU指令操作,就是Reg A和Reg B两个寄存器的数据运算和存储。但是呢,我们手上有4个寄存器:R0、R1、R2、R3,每一个Reg A或Reg B可以是R0、R1、R2、R3中的任意一个,因此,我们需要对R0、R1、R2、R3编码,这样,就可以实现对任何一个寄存器的操作,如下图所示:

针脚型cpu的性能指标(CPU系列-ALU指令编码及解析)(5)

这样就可以通过指令后四位的寄存器编码,实现对寄存器里面数据的操作。

针脚型cpu的性能指标(CPU系列-ALU指令编码及解析)(6)

助记符如下:

针脚型cpu的性能指标(CPU系列-ALU指令编码及解析)(7)

,