ACC(累加器):
用于存储高位部分
MQ(乘数-商寄存器):
用于存储低位部分。在除法中保存商,在乘法中保存乘数,所以也叫乘商寄存器
左移 8 位(相当于乘以 256)2^8
左移 16 位(相当于乘以 65536)2^16
加法:
被加数在ACC中,从内存单元取出加数放到X寄存器中,然后通过ALU运算器得出和,最后将和放到ACC累加器中
减法:
被减数在ACC中,从内存单元取出减数放到X寄存器中,然后通过ALU运算器得出差,最后将差放到ACC累加器中
乘法:
被乘数在ACC中,从内存单元取出乘数放到MQ寄存器中,将ACC中的被乘数传到X寄存器中,将0赋给ACC,然后通过ALU运算器得出乘积,乘积高位放到ACC中,乘积低位放到MQ中(这些先后操作顺序由控制器控制)
除法:
被除数在ACC中,从内存单元取出除数放到X寄存器中,然后通过ALU运算器得出商和余数,商保存在MQ中,余数保存在ACC累加器中
控制器
1、解释指令(从取址、到分析、取操作数、到真正的去执行指令、一直到保存结果)
2、保证指令的有序执行
PC和IR都是寄存器
PC(程序计数器)存储的是存储单元的地址。
(要完成取数指令,要先完成取指令,“取数”指令(即从内存中读取数据的指令))
取指令的过程:
1、程序计数器 PC 把指令地址传给 MAR:
程序计数器(PC)保存了下一条指令的地址。这个地址被传送到 MAR(Memory Address Register),即内存地址寄存器。
2、MAR 将指令地址传给存储体:
MAR 中的地址通过地址总线传输到存储体(内存),以便指定要访问的内存单元。
3、在控制器的控制下,存储体把指定存储单元中的指令取出,送入 MDR:
控制单元发送一个“读”信号到内存,指示内存读取 MAR 中指定地址的内容。
内存控制器在接收到读信号后,从指定的地址读取指令,并将该指令加载到 MDR(Memory Data Register)中。
4、MDR 将暂存的指令送入 IR:
MDR 中的指令通过数据总线传输到 IR(Instruction Register),即指令寄存器。
IR 保存当前正在执行的指令,取指令完成:
IR 接收到指令后,暂存该指令,并准备进行指令解码和执行。
分析指令的过程:(取数指令——主要是将内存单元中的数据M取到ACC寄存器中)
5、IR 中的操作码被发送到控制单元(CU),控制单元解码操作码以确定接下来要执行的操作。
6、IR 中包含的地址码(操作数的地址)被提取并送入 MAR 中,以便访问具体的数据。
7、MAR 中(操作数的)地址通过地址总线再次传输到存储体。
8、在控制器的控制下,从存储体当中,把取数指令要取的数取出,存入MDR
9、MDR 中的数据通过数据总线传输到累加器(ACC)寄存器中。
完成取数操作
存数指令
8、将 ACC 中的内容传输到 MDR:
在控制器的控制下,将累加器(ACC)中的数据传输到内存数据寄存器(MDR)。这个步骤确保了要存储的数据被准备好,并放置在将要写入内存的寄存器中。
9、将 MDR 中的数据保存到存储器中:
控制器指导存储体将内存数据寄存器(MDR)中的数据保存到内存中的指定位置。这个步骤实际上完成了将数据从 CPU 移动到内存的过程,数据现在已经存储在内存中的指定位置。
PC + 1:在当前指令周期结束后,PC 加一,指向下一条指令的地址。
这种自动加一的过程确保了程序能够按照顺序执行,除非在执行过程中出现了跳转或分支指令,否则程序会顺序执行每一条指令。