1.请分析一般指令的执行过程,并给出每个阶段对应的微操作。
分析一条指令的执行过程
指令的执行过程可能有一个周期,只有取指周期;也可能有两个周期,取指周期和执行周期;
如果有间指操作的话,还包括了间指周期;如果有中断操作的话,还要执行中断周期。
取指周期需要将指令从内存单元中取出,放入CPU的IR寄存器;
需要对指令的操作码部分进行分析(把操作码部分送给CU,由CU确定这是系统当中的哪一条指令);
需要对寻址方式进行分析。
间指周期需要访问一次内存,把操作数的地址从内存单元取出。
执行周期包括完成指令要求的全部运算(从内存单元取出操作数、进行相应的运算操作并把运算结果保存在给定的寄存器当中)。
如果有中断周期的话,在每条指令执行周期结束,要确认是否有中断请求。如果有中断请求,则需响应中断,
响应中断过程包括:保存断点、形成中断服务程序入口地址、硬件关中断。
取值周期的微操作
要想把指令从内存单元当中取出,则需要知道指令的地址,而指令的地址保存在程序计数器(PC)中。
首先PC要把包含的指令地址送给MAR,再通过MAR把信号送给地址总线,最后送到存储器当中。
PC—>MAR—>地址总线—>存储器
然后由控制单元向存储器发出读命令,读出的数据由数据总线送给MDR这个寄存器,
再由MDR送到IR当中,那么指令就被取到了IR寄存器。
1—>R
M(MAR)—>MDR
MDR—>IR
取值周期可能还要完成译码的任务,译码来确定这条指令到底要做什么操作,所做的操作由指令的操作码部分给出。所以要把指令的操作码部分送给CU,CU去译码,来确认这条指令要做什么操作。
OP(IR)—>CU
另外取值周期还要对PC进行拓展,指令取完,可以对PC中的内容进行更新,为取下一条指令做准备。
(PC)+1—>PC
间指周期的微操作
通过间指周期,把操作数的地址从存储器当中取出,放入到指令寄存器(IR)当中所保存的地址码部分。
首先将指令的形式地址(IR中的地址码部分)传送给MAR,再通过MAR传送到地址总线,进而传送到存储器的地址线上。要实现这个操作,控制器要发出将IR的地址码部分送给MAR的控制信号,然后由控制器向存储器发出读操作命令。存储器接收到地址和读操作命令以后,在指定的内存单元当中将操作数的地址取出,通过数据总线传输给MDR。
Ad(IR)—>MAR—>地址总线—>存储器
1—>R
M(MAR)—>MDR
被取出的地址进一步被送到IR寄存器的地址码部分,这个时候IR寄存器当中包含的指令的地址码部分就是操作数的物理地址(操作数所在的存储单元的地址)
MDR—>Ad(IR)
执行周期的微操作
不同指令执行周期的微操作是不同的。
中断周期的微操作
中断周期三件事:保存断点、形成中断服务程序入口地址 、硬件关中断。
保存断点两种方法:1)程序断点保存入“0”地址2)程序断点进栈
1) 如果采用程序断点存入给定的一个地址,控制单元要把断点保存到内存中。
0—>MAR
对存储器进行写操作,控制单元向存储器发出写命令。
1—>W
程序断点进行保存,保存至程序计数器PC中,PC寄存器的内容保存入MDR。
PC—>MDR
完成写入操作,将MDR的内容保存到MAR指定的内存单元中。
MDR—>M(MAR)
—————————————————————————————————————————
形成中断服务程序入口地址,如果采用硬件向量法,把向量地址保存到PC中。
向量地址—>PC
形成中断服务程序入口地址,如果采用软件查询法,则需将中断识别程序的入口地址M—>PC,将来由CPU执行中断识别程序,来给出中断服务程序的入口地址。
M—>PC
—————————————————————————————————————————
硬件关中断,将0送入到允许中断触发器中,实际的操作命令如下:
0— >EINT(置“0”)
2)如果采用程序断点进栈,首先要修改栈顶,形成新的栈顶地址,将这个地址送给MAR。
(SP)-1—>MAR
写操作,将PC的内容保存到内存单元中。
PC—>MDR
完成写入操作,将MDR的内容保存到MAR指定的内存单元中。
MDR—>M(MAR)
—————————————————————————————————————————
形成中断服务程序入口地址,如果采用硬件向量法,把向量地址保存到PC中。
向量地址—>PC
形成中断服务程序入口地址,如果采用软件查询法,则需将中断识别程序的入口地址M—>PC,将来由CPU执行中断识别程序,来给出中断服务程序的入口地址。
M—>PC
—————————————————————————————————————————
硬件关中断,将0送入到允许中断触发器中,实际的操作命令如下:
0—>EINT(置“0”)