加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2011-12-23 12:21:30)
标签:

执行阶段

操作数

指令周期

指令寄存器

数据缓冲寄存器

it

分类: electronic
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周期。

http://online.ncu.edu.cn/eol/common/ckeditor/openfile.jsp?id=DBCPDCDHDADGDACPDBCOGCGNHA

 第一个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周期组成:

http://online.ncu.edu.cn/eol/common/ckeditor/openfile.jsp?id=DBCPDCDHDADGDECPDBCOGCGNHA

 

其中在第二个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]

http://online.ncu.edu.cn/eol/common/ckeditor/openfile.jsp?id=DBCPDCDHDADGDHCPDBCOGCGNHA

  STR [F0H]是一条直接寻址指令,把累加器AC的内容存入内存单元,它的指令周期由二个CPU周期组成,如图7-12所示。其中第一个CPU周期为取指令阶段,第二个CPU周期为存操作数
1)取指令阶段
 STR [F0H]指令的第一个CPU周期完成取指令操作并对指令译码。STR指令取出后,PC=0013H,为取下一条指令作好了准备。
2存操作数
 第二个CPU周期主要完成送操作数地址,访问内存单元存操作数。此阶段的操作如图7-13所示,在此阶段内,CPU的操作如下:
7-13 STR [F0H]指令的执行阶段
 把指令寄存器中地址码部分的形式地址F0H装到地址寄存器AR
 累加器AC的内容(0005H)被传送到数据缓冲寄存器DR
 把地址寄存器AR的内容(00F0H)发送到地址总线上,00F0H即为将要存入的数据0005H的内存单元地址;
  把缓冲寄存器DR的内容(0005H)发送到数据总线上
  操作控制器发出写WR控制信号,将0005H写入到存储器00F0H单元中。

 注意:在这个操作之后,累加器中仍然保留和数0005H,而存储器00F0H单元中原先的内容被修改。

 4. JMP指令的指令周期

 STR [F0H]指令取出后,PC=0013H,因此下一条要执行的指令是存放在0013H单元的“JMP 11H指令。JMP是一条程序控制转移指令,其指令周期由两个CPU周期组成,如图7-14所示。其中第一个CPU周期为取指令阶段,第二个CPU周期为执行阶段。

http://online.ncu.edu.cn/eol/common/ckeditor/openfile.jsp?id=DBCPDCDHDADGDJCPDBCOGCGNHA

1第一个CPU周期(取指令阶段)
 CPU0013H号单元的“JMP 11H”指令取出送到指令寄存器IR,同时程序计数器PC内容加1,变为0014H,指令译码后知道IR中的指令是无条件转移指令。
2第二个CPU周期(执行阶段)
 CPU把指令寄存器IR中地址码部分0011H送到程序计数器,从而用新内容0011H代替PC原先的内容0014H。这样,下一条指令将不从0014H单元读出,而是从内存0011H单元开始读出并执行,从而改变了程序原先的执行顺序。JMP指令执行阶段的操作如图7-15所示。
7-15 JMP 11H的执行阶段
 注意:执行“JMP 11H”指令时,我们这里所给的四条指令组成的程序进入了死循环,除非人为停机,否则这个程序将无休止地运行下去,因而内存单元00F0H中的和数将一直不断地发生变化。当然,我们此处所举的转移地址0011H是随意的,仅仅用来说明转移指令能够改变程序的执行顺序而已。
 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有