假定某计算机字长16位,CPU内部结构入下图所示,CPU和存储器之间采用同步方式通信,按字编址。指令采用定长指令字格式,由两个字组成,第一个字指明操作码和寻址方式,第二个数包含立即数imm16。若一次存储器访问所花时间为2个CPU时钟周期,每次存储器访问存取一个字,取指令阶段第二次访存将imm16取到MDR中,请写出下列指令在指令执行阶段(不考虑取指令阶段)的控制信号序列,并说明需要几个时钟周期。 ①将立即数imm16加到寄存器R1中。即R[R1]?R[R1]+imm16。 ②将地址为imm16的存储单元的内容加到寄存器R1中。即R[R1]?R[R1]+M[imm16]. ③将存储单元imm16的内容作为地址所致的存储单元的内容加到寄存器R1中。此时,imm16为间接地址。即:R[R1]?R[R1]+M[M[imm16]]。
解答: ①该过程可以分为: MDRout Yin(将立即数从MDR存储器数据寄存器中取出,通过CPU总线将数据送到寄存器Y中) R1out ADD Zin(将通用寄存器R1中的内容取出,通过CPU总线送到算术逻辑部件ALU处,进行加法运算,加法运算的结果存入寄存器Z中) Zout R1in(将寄存器Z中的内容取出,通过CPU总线送往通用寄存器R1中); 综上,由于上面每一个步骤均为1个时钟周期,因此共需要3个时钟周期才能完成该动作。 ②该过程可以分为: MDRout MARin(从指令中读取立即数imm16后,从MDR存储器数据寄存器中取出,通过CPU总线将立即数送到存储器地址寄存器MAR中); Read R1out Yin(按照给定的地址读取指定存储器中的内容,此时在CPU中可以并行地取出通用寄存器R1中的内容并通过CPU总线将其送入寄存器Y中准备进行计算) MDRout ADD Zin(读出存储器中的指定内容后会放入MDR存储器数据寄存器中,此时从存储器数据线中取出指定内容,并通过CPU总线将其送入ALU作为其中一个运算数并执行一次加法运算,将运算的结果存入寄存器Z中) Zout R1in(将运算结果从寄存器Z中取出,通过CPU总线送到通用寄存器R1中) 经过分析,上述步骤分别需要1、2、1、1个时钟周期,因此总共花费的时钟周期为5个。 ③该过程可以分为: MDRout MARin(从指令中读取立即数imm16后,从MDR存储器数据寄存器中取出,通过CPU总线将该立即数送到存储器地址寄存器MAR中) Read R1out Yin(按照给定的地址读取指定存储器中的内容,此时在CPU中可以并行地取出通用寄存器R1中的内容并通过CPU总线将其送入寄存器Y中作为一个运算数) MDRout MARin(从存储器中读出M[imm16]的内容后该内容被存放在存储器数据寄存器MDR中,此时通过CPU总线将该内容作为地址再次送到存储器地址寄存器MAR中) Read(在存储器中读取指定地址M[imm16]的内容) MDRout ADD Zin(从存储器数据寄存器MDR中取出M[M[imm16]]的内容,将其送到算术逻辑部件ALU处作为一个操作数,ALU执行加法运算后将运算结果送到寄存器Z中) Zout R1in(取出寄存器Z中的内容,通过CPU总线将内容送到通用寄存器R1中) 综上,各个步骤分别需要1、2、1、2、1、1个时钟周期,因此总共需要8个时钟周期。
|