计组计算机组成原理ch_第1页
计组计算机组成原理ch_第2页
计组计算机组成原理ch_第3页
计组计算机组成原理ch_第4页
计组计算机组成原理ch_第5页
已阅读5页,还剩39页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 三 章 指 令 集 结 构 指令集结构(instruction set architecture) ,即 ISA,是微处理器的接口,包含了与该微处理器进行交互所需要的信息,但并不涉及微处理器自身如何设计和实现的细节。 什么是指令集结构? ISA包括:微处理器的指令集、程序员可直接访问的寄存器的细节、访问内存所需的信息、微处理器如何响应中断。 本章先讨论程序设计语言。包括不同级别程序设计语言转换成二进制代码、不同类型的汇编语言指令及所运行的数据格式、微处理器可能有的不同寻址方式和指令格式。 之后分析指令集结构。包括设计一个微处理器ISA的指令集和寄存器组时所要考虑的因素,以及分析了两种微处理

2、器的指令集结构:相对简单CPU和8085微处理器。3.1 程序设计语言的级别 3.1.1 语言种类 高级语言(high-level languages) 汇编语言(assembly language) 向下兼容(backward compatible) 平台无关(platform-independent) 机器语言3.1.2 编译和汇编程序 编译、汇编编译器源代码、目标代码连接器、装载器图3.1 高级程序的编译过程 装载器包含在计算平台中 编译过程 同一高级语言源代码可以经过编译在不同的微处理器和操作系统或者计算平台上运行。汇编器汇编过程 图3.2 汇编语言程序的汇编过程 每一种汇编语言对应一

3、种微处理器,不需要针对不同平台的汇编器 。目标代码的连接和装载过程是相同的 一条语句可能有多种有效的转换,而汇编语言指令都唯一对应一种机器代码指令。汇编器比编译器简单 只需要汇编语言程序的更简单的系统高级语言与汇编语言的使用个人计算机上的软件二者一起形成最优化代码 小型计算机系统的代码,例如微波炉控制器 3.2 汇编语言指令 3.2.1 指令类型 3.2.1.1 数据传送指令 将数据从一个地方移到另一个地方(实际是“拷贝”),包括:内存取数据到微处理器、微处理器中的数据存到内存、微处理器内移动数据、输入数据到微处理器、从微处理器输出数据。3.2.1.2 数据运算指令 包括算术运算指令、逻辑运算

4、指令 、移位指令。3.2.1.3 程序控制指令 控制程序流程的指令,包括:跳转指令(条件或无条件)或分支指令、子程序调用和子程序返回指令、“软中断”指令、停机指令。3.2.2 数据类型 数值数据 无符号整型数、有符号整型数、浮点数据 布尔数值 数据值常以0表示FALSE,以非0表示TRUE 字符数据 字符编码标准(ASCII、EBCDIC、UNICODE、或别的)3.2.3 寻址方式 寻址方式(addressing modes):微处理器对内存进行读或写操作时指定它要访问的内存地址的方式。3.2.3.1 直接寻址方式 在该寻址方式中,指令包含有要访问单元的内存地址。例如:LDAC 5 ;从内存

5、单元5读取数据并且把数据存储 ;在CPU的累加器中 该方式主要用于把操作数和变量值装载到CPU。 3.2.3.2 间接寻址方式 与直接寻址方式相似,但要进行两次内存访问。指令中指定的地址并不是操作数的地址,而是含有操作数地址的内存单元的地址。 例如:LDAC 5 或 LDAC (5) ;首先检索单元5中的内容,得到10。然后CPU到单元 ;10读取该单元的内容并把数据装载到CPU 常用于编译器或操作系统来处理浮动代码及数据。例如,假设寄存器R中存储了数值5,则: LDAC R ;把数值5从寄存器R中拷贝到CPU的累加器中 LDAC (R) 或 LDAC R ;相当于 LDAC 5,从寄存器R中

6、获取地址3.2.3.4 立即值寻址方式 指定的操作数不是一个地址,而是确实要用到的数据。例如:LDAC #5 ;把数据值5移到累加器中3.2.3.3 寄存器直接寻址和寄存器间接寻址 与直接和间接寻址方式相似,但指定的寄存器,而不是内存单元。3.2.3.5 隐含寻址方式 并不明确地指出操作数,因为总是用到特定的寄存器。并非总用于装载指令。例如: CLAC ;清空CPU中的累加器,即将其值置为0 常用于用堆栈存储数据的CPU中。指令中不需要指定操作数,因为它暗示操作数一定来自堆栈。 3.2.3.6 相对寻址方式 该方式中,操作数不直接提供地址,而是提供一个偏移量。它与CPU中程序计数器的内容相加生

7、成所需的地址。 程序计数器存有当前正在执行指令的地址。例如:LDAC $5 ;若该指令定位于内存单元10,且它占用两个内存单元, ;则下一条指令会位于单元12,指令从单元(125)17 ;读取数据并且把它存于累加器中 该寻址方式对于短跳转和可重定位代码很有用。 3.2.3.7 变址寻址方式和基址寻址方式 变址寻址方式与相对寻址方式类似,但它是将指令提供的地址与变址寄存器中而不是程序计数器中的内容相加 。 例如: LDAC 5(X) ;如果变址寄存器包含数值10,则从单元(510)15 ;读取数据并且把它存储在累加器中。 除了用基址寄存器替换变址寄存器外,基址寻址方式和变址寻址方式完全一样。 图

8、3.3 使用如下寻址方式产生地址: (a)直接, (b)间接, (c)寄存器直接, (d)寄存器间接, (e)立即数, (f)隐含, (g)相对,和 (h)变址 3.2.4 指令格式 指令代码(instruction code):汇编语言指令转换成对应的机器代码,以二进制数值的形式表现。 位的不同分组代表着指令的不同部分。某一组可能代表要执行的操作(操作码),而其它的组则选取操作的操作数。 考虑一个简单的例子ABC。该指令有一个操作加法,两个源操作数B和C,和一个目的操作数A。 如果微处理器可以执行16种不同的操作,加法是其中的一种,那么它需要4位来代表其中的操作(因为2416)。这里,我们假

9、设位模式1010代表加法。 而且假定对于这种操作仅有4种可能的操作数A,B,C和D。微处理器需要两位来表示每一种操作数。对于本例,00代表A,01代表B,10代表C,11代表D。 图3.4 采用(a)三操作数,(b)二操作数,(c)单操作数,(d)0操作数的指令格式和计算ABC的汇编语言程序以及机器代码。 微处理器可以设计成能运行具有3、2、1或0个操作数的指令。 查看图3.4的代码,我们能发现较少的操作数通常转化为较多的指令来完成同样的任务。 本例子简单地说明了三,二,一和零操作数指令的不同。实际上,这些指令需要比本例更多的位数。一个操作数字段可以指定一个任意的内存地址,而不只是四个寄存器中

10、的一个。每个操作数可能需要16、32甚至更多的位数。另外还需要一些位用于指定每个操作数的寻址方式。 3.3 指令集结构设计 设计指令集结构并没有魔术公式可言。相同的需求会产生不同的ISA设计,但每一种都是正确的。与许多的工程设计一样,在设计ISA规范时,必须在性能与大小和成本限制间有个评估折衷。 完整性问题,就是说,该指令集是否有足够的指令可以让程序完成它必须的任务? 正交性问题,如果指令不重叠或者不执行同样的操作,那么它们就是正交的。在最小的指令集中为程序员提供必需的操作。 设计者可以优化ISA的另一个地方就是寄存器组。要考虑的其它问题:。处理器必须向下兼容其它的微处理器吗?。微处理器将处理

11、何种类型和大小的数据? 浮点数据 。需要中断吗? 。需要条件指令吗? 标志(flags)3.4 相对简单的指令集结构存储器模型:该微处理器可以访问64K(216)字节的存储器(每字节8位)或者64K8的存储器。从外部设备输入数据和输出数据到外部设备,都可以被看作是访问内存有三个寄存器:累加器(AC)、寄存器R、1位零标志Z。包含16条指令,每一条都是8位指令代码,见表3.1 表3.1 相对简单CPU的指令集 LDAC、STAC、JUMP、JMPZ和JPNZ指令都需要16位的存储地址,此处用表示。由于存储器的每一个字节都是8位宽,所以这些指令在存储器中每个都需要3字节。第一个字节包含指令的操作码

12、,另外两字节对应地址。 例如:25:JUMP 1234H该指令以如下形式存储在存储器中: 25:0000 0101(JUMP) 26:0011 0100(34H) 27:0001 0010(12H)注意:第二字节低8位,第三字节高8位3字节格式 1字节格式 下图显示了相对简单CPU的指令格式。 图3.5 相对简单CPU的指令格式 全部16条指令:数据传送指令:NOP、LDAC、STAC、MVAC和MOVR 程序控制指令:JUMP、JMPZ和JPNZ 数据运算指令: 算术指令- ADD、SUB、INAC和CLAC 逻辑指令- AND、OR和XOR,NOT指令集结构的用法举例: 用相对简单CPU编

13、程计算12n,或者 。 则其高级语言的代码片断如下: 可以把数值n存储在标明为n的存储单元中,结果存在标明为total的内存单元处,内存单元i用于存储求和的次数。确定运算步骤如下: total 0; FOR i1 TO n DO totaltotali; 1:total0,i0 2:ii1 3:totaltotali 4:IF in THEN GOTO 2实现这一算法的相对简单CPU的代码如下: CLAC STAC total STAC i Loop: LDAC i INAC STAC i MVAC LDAC total ADD STAC total LDAC n SUB JPNZ Loopt

14、otal0,i0ii1totaltotaliIF in THEN GOTO Loop下表显示了当n5时代码的运行过程:表3.2 循环求和程序的执行步骤 怎样看待这个指令集结构? 它满足了以教学为目的的设计目标。当我们在第6和7章中设计这种CPU时我们就会看到,其复杂度足以阐明很多CPU的设计原则,却又没有掉进自身复杂度的陷阱中。 对于简单的应用程序来说,指令集完整。如果一个应用程序需要使用浮点型数据,它就不是十分完整。对于通用计算机(例如个人计算机),该指令集显然是不够的。 该指令集是相当正交的。只是多了OR指令,但有时CPU的指令集不是完全正交更好一些。 寄存器组是它最大的弱点。寄存器的缺乏

15、导致执行任务较慢,并且降低了性能。 3.5 实例:8085微处理器指令集结构本小节分析Intel8085微处理器的ISA。 3.5.1 8085微处理器的寄存器组 通用数据寄存器: 累加寄存器A - 总是接收一个8位的算术或逻辑指令的结果;也为所有采用二操作数的指令提供一个操作数。 六个通用寄存器 - 命名为B,C,D,E,H和L ,可成对访问:B和C,D和E,H和L 。寄存器对HL常用来指向内存单元。 16位的堆栈指针寄存器SP:包含堆栈顶部的地址。 5个标志,共同称为标志寄存器: 符号标志S:表明算术或逻辑指令计算出的结果的符号。其中,值1表示负数;值0表示正数(或零)。 零标志Z:如果算

16、术或逻辑运算指令产生的结果为0,则将Z置为1;否则Z为0。 奇偶标志P:如果算术或逻辑运算结果中有偶数个1,则将P置为1;否则P为0。 进位标志CY:当算术运算产生进位时才去设置它。例如,加法1111 00001000 00001 0111 0000,对两个8位值相加但产生了9位结果。最左边的1被存储在CY中;如果加法不产生进位1,则CY中会存储0。 辅助进位标志AC:与进位标志类似。它不指明进位值,但指出从结果的低四位向高四位传递了进位。 中断标志寄存器IM:用于允许和禁止中断而且检查待处理的中断。程序员可以读取并且设置该寄存器中的值来处理中断。 3.5.2 8085微处理器指令集 8085

17、指令集总共包含了74条指令。可分为三个部分:数据传送指令、数据运算指令和程序控制指令。采用如下记号描述: r,r1,r2:表示任何一个8位寄存器A,B,C,D,E,H,或者L。 M:表示内存单元。MHL表明该内存单元的地址存在寄存器对HL中。 rp:表示寄存器对BC,DE,HL,或者堆栈指针SP。 :一个16位地址或者数据。 n:是一个存储在内存中且紧跟操作码后的8位地址或者数据值。 cond:条件指令的一个条件。值为:NZ、Z、P、N、PO、PE、NC、C。 数据传送指令以及它们的功能。除了POP PSW指令外,其它指令都不会修改标志的值。 表3.3 8085微处理器的数据传送指令 指令的通

18、用格式。一些指令有指定寄存器的字段,而另一些指令这些部分却是固定的。 图3.6 8085的指令格式一字节二字节三字节数据运算指令。大多数会影响表中的标志。 表3.4 8085微处理器的数据运算指令 13条程序控制指令。DI,EI,RIM和SIM包含在此因为它们可以处理中断,而中断最终又会影响程序控制。这些指令都不修改标志。 表3.5 8085微处理器的程序控制指令 3.5.3 一个简单的8085程序 计算和12n,并且把结果存储于内存单元total中 。n值最初存于标志为n的内存单元中。 当设计此程序时,我们计算如n(n1)1形式的总和。 算法如下: 与相对简单CPU中的程序不同,8085程序把它的运行值存储在CPU寄存器中。寄存器B包含数值i,总和存储在寄存器A中。 1: in,sum0 2:sumsumi,ii1 3:IF i0 THEN GOTO 2 4:totalsum 执行该算法的8085代码如下: LDA n MOV B,A XRA A sumAA0 Loop: ADD B sumsumi DCR B ii1 JNZ Loop IF i0 THEN GOTO Loop STA total totalsumin运行值存储在CPU寄存器,减少了内存访问次数,程序更短、运行速度更快 该程序仅需要七条指令,而对于相对简单CPU

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论