运算器
接收并执行控制器(指挥中心)的命令,用于实现算术运算(加+减-乘*除/)、逻辑运算(与&、或|、异或^、非!)和移位运算(左移<<、右移>>、无符号右移>>>、求补),这些运算都依赖算术逻辑单元ALU。
ALU:算术逻辑单元,通过内部复杂的电路实习算术运算和逻辑运算;
ACC:累加器(也是寄存器),用于存放操作数或者运算结果;
MQ:乘商寄存器,在乘、除运算时,用于存放操作数或运算结果;
X:通用的操作数寄存器(多个),用于存放操作数。
运算器依赖于算术逻辑单元ALU,ALU之外还有一堆的寄存器,这些寄存器都可以统称为通用寄存器组(很多个,现在没有分那么清楚),eg ACC、MQ等 。运算的时候数据需要进行临时存储,临时存储需要放在通用寄存器组里的某一个寄存器里,运算完之后会把运算结果输出到对应的寄存器里,这些数据有可能通过数据总线传输给其他设备如存储器,有可能存储在通用寄存器组里。
一、ALU的功能结构
ALU的功能就是进行各种运算,所有的运算最终都是归结于加法运算(加法运算其实从电路上来说也是逻辑运算),所以认识一下加法器。
如图,寄存器(通用寄存器和其他的寄存器)用来存数据 ,通用寄存器组存放的数据大部分由内存(主存)过来的,临时存放数据(还有栈、指针、地址)。乘法和除法还有中间过程的一些数据,在运算过程中会产生大量的信息,中间的过程数据也会存放在对应的寄存器里。PSW是状态寄存器, 记录一些进位、溢出等。操作数两个输入信号输入之后进行运算,运算类型由控制信号决定,控制信号可能有很多,然后对运算结果进行输出。ACC是典型的累加器(累加寄存器),eg CPU在进行运算的时候最初从内存拿数据先放到通用寄存器,再把数据放到左边运算的那些寄存器里(也能把数据直接从通用寄存器里拿出来进行运算),ACC一般放一些被加数、被减数、被除数被乘数等,MQ是乘商寄存器,就是乘法除法运算的时候会一些操作数,一般放乘数或乘的结果除的结果(感觉不用理解太深)。
A0~A3和B0~B3,一个输入数有四位,两个操作数各四位,一次性能操作的单个输入数的位数是多少位就说CPU是多少位的(实际的要比上面的模型大很多不止4位),Cn代表进位(eg 1+1写0进一位),换句话说两个操作数进行运算的时候是前面的运算给的进位这个叫低位进位,是因为之前有数据操作完了之后要进位就伴随着Cn进来了,所以A和B进行运算其实是前面的低位的进位,发过来A和B运算完了之后也可能会进位,这时Cn+4(4代表那个位宽)代表进位,给下一个进位,这叫高位进位。
这里输出结果也是四位(输入也是四位),控制信号S0~S3也是四位,都是二进制位,位宽只有4位,4个二进制位最多表示也就是16种可能,也就是说可以进行16种不同运算(加减乘除、逻辑运算与或非、移位......),M是进行运算的类型,eg A和B这两个操作数要进行相加,那它是如何知道要进行加法运算的,就是控制器通过控制信号告诉运算器的,ALU里分两大类运算分别是算术运算和逻辑运算,辅助功能可以归结到逻辑运算里,也就是说有两种可能,这两种可以用M来表示,M这个线若输入的值是0,就进行算术运算,至于进行哪种算术运算由S0~S3决定,就是用其中某一种二进制位组合来表示哪种算术运算;若M=1,要进行逻辑运算,S0~S3也表示对应的逻辑运算。
- 算术运算归结为加法运算去·
- 控制信号决定是否进行逻辑运算,那些辅助功能也可以归结为逻辑运算
二、如何实现逻辑运算
介绍几个实现逻辑运算的逻辑电路,算术运算也是由这些逻辑电路完成的,常见的逻辑电路有这几个:
- 与 & Y=A
B
- 或 | Y=A + B
- 非 ! Y=
- 异或 ^ Y=A⊕B
- 与非: Y=
=
+
- 或非: Y=
=
把0和1看成是高低电平的话,在异或中只有输入不同电平时输出才为高电平,在与非中,只有输入都为高电平时输出才为低电平,在或非中,只有输入都为低电平时输出才为高电平。