新浪博客

典型指令的指令周期(网络)

2011-12-23 12:21阅读:
7-1给出了四条典型指令组成的一个简单程序,其中LDA是数据传送指令,ADD是加法指令,STR是存操作数指令,JMP是无条件转移指令,实现程序顺序控制。本小节通过每一条指令取指阶段与执行阶段的分解动作,来具体认识每一条指令的指令周期。 表7-1 典型指令组成的一个简单程序
十六进制数地址
十六进制数代码
助记符
指令功能说明
0010
3E00
LDA 00H
AC←00H
0011
18E0
ADD [E0H]
AC←(AC)+(00E0H)
0012
10F0
STR [F0H]
00F0H←(AC)
0013
6011
JMP 11H
PC←0011H




00E0
0005
数据

00E1
0020


00F0
存放和数

1. LDA指令的指令周期
假定7-1的简单程序已装入内存中,程序计数器PC指向程序的首地址, PC= 0010H即存放“LDA 00H”指令的内存单元,所以CPU首先执行的第一条指令是LDALDA 00H采用立即寻址,执行阶段不要访问内存,其功能是把立即数传送到累加器,其指令周期如图7-6所示。它需要两个CPU 周期,其中取指令阶段需要一个CPU周期,执行指令阶段需要一个CPU周期。

第一个CPU周期是取指周期,CPU完成三件事:①从内存取出指令;②对程序计数器PC1,为取下一条指令作好准备;③对指令操作码进行译码或测试,以便确定进行什么操作。
在第二个CPU周期,即执行指令阶段,CPU根据对指令操作码的译码或测试,进行指令所要求的操作。对非访内指令来说,执行阶段通常涉及到对累加器进行操作,如累加器内容清零、求反等操作。显然,其他一些零地址格式的指令,执行阶段也仅需要一个CPU周期。

7-7 LDA 00H的取指周期操作
1取指周期
LDA的取指周期操作如图7-7所示,在此阶段内,CPU的操作如下:
程序计数器PC的内容0010H被装入地址寄存器AR
程序计数器内容加1,变成0011H,为取下一条指令做好准备;
地址寄存器的内容被放到地址总线上;
所选存储器单元0010H的内容经过数据总线,传送到数据缓冲寄存器DR
缓冲寄存器的内容传送到指令寄存器IR
指令寄存器中的操作码被译码或测试;
CPU识别出是指令LDA,至此,取指令阶段即告结束。
需要说明的是,取指周期的过程和数据通对每条指令来说都是一样的,所不同的是PC的值和取得的指令代码不一样。后续指令ADDSTRJMP的取指周期LDA令相同,因此,不必重复讨论
2执行指令阶段
LDA指令的执行阶段如图7-8所示,在此阶段内,CPU的操作如下:
经译码后知道LDA 00H指令采用立即寻址方式,操作数跟在操作码之后,已经存放在指令寄存器IR中,操作控制器送出控制信号,在IR与数据缓冲寄存器DR之间建立数据通路,把立即数打入DR
操作控制器再送出控制信号在DRALU之间建立数据通路,把立即数送到ALU的输入端;
ALU响应传送操作控制信号,将输入ALU的数据送到累加寄存器AC,从而执行了LDA 00H指令。

7-8 LDA指令执行阶段
2.ADD指令的指令周期
取出第一条指令LDA时,PC的内容已经加1变成了0011H,这个地址指向存放“ADD [E0H]”指令的内存单元,所以接下来执行的指令是ADD [E0H]
ADD指令是一条访问内存取数并执行加法的指令,它的指令周期由三个CPU周期组成,如图7-9所示。其中第一个CPU周期为取指令阶段;执行阶段由两个CPU周期组成:


其中在第二个CPU周期中完成从内存单元取出操作数,第三个CPU周期执行加法操作。
1)取指令阶段
ADD指令的第一个CPU周期完成取指令操作并对指令译码。ADD指令取出后,PC=0012H
2取操作数
第二个CPU周期主要完成送操作数地址,访问内存单元取操作数。此阶段的操作如图7-10所示,在此阶段内,CPU的操作如下:
把指令寄存器中的地址码部分(E0H)入地址寄存器AR,其中00E0H为内存中存放操作数的地址;
把地址寄存器中的操作数的地址(00E0H)发送到地址总线上;
由存储器单元00E0H中读出操作数(0005H),并经过数据总线传送到缓冲寄存器。

7-10 ADD指令的取操作数阶段
3执行加法操作
第三个CPU周期主要完成加法操作如图7-11所示,在此阶段,CPU完成如下动作:

7-11 ADD指令的加法操作阶段
由数据缓冲寄存器来的操作数(0005H)可送往ALU 的一个输入端,已等候在累加器内的另一个操作数(因为LDA 00H指令执行结束后累加器内容为零)送往ALU的另一输入端,于是ALU将两数相加,产生运算结果为0+0005H0005H。这个结果放回累加器,替换了累加器中原先的数0000H
3. STR指令的指令周期
取出ADD [E0H]指令时,PC的内容已经加1变成了0012H,这个地址指向存放“STR [F0H]”指令的内存单元,所以接下来执行的指令是STR [F0H

我的更多文章

下载客户端阅读体验更佳

APP专享