计算机组成原理-第3章指令集结构_第1页
计算机组成原理-第3章指令集结构_第2页
计算机组成原理-第3章指令集结构_第3页
计算机组成原理-第3章指令集结构_第4页
计算机组成原理-第3章指令集结构_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

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

文档简介

第三章指令集结构3.1程序设计语言的级别3.2机器语言指令3.3指令集结构设计3.4相对简单的指令集结构3.5实例3.1程序设计语言的级别

3.1.1语言种类

高级语言(high-levellanguages)

汇编语言(assemblylanguage)

向下兼容(backwardcompatible)

平台无关(platform-independent)

机器语言3.1.2编译和汇编程序

1.编译、汇编2.编译器

源程序、源代码、目标代码连接器、装载器3.编译过程同一高级语言源代码可以经过编译在不同的微处理器和操作系统或者计算平台上运行。图3.1高级程序的编译过程装载器包含在计算平台中

4.汇编器和汇编过程

图3.2汇编语言程序的汇编过程

每一种汇编语言对应一种微处理器,不需要针对不同平台的汇编器。1.什么是指令?指令:指示计算机执行某种操作的命令。机器语言:计算机硬件实体直接表示控制信息的语言。

(计算机硬件能直接理解并执行的语言)指令集:一台计算机能执行的全部指令的集合。(计算机程序员接触到的计算机的所有功能)

一条指令就是机器语言的一个语句,用来说明机器硬件应完成的操作。3.1.3机器语言与指令

指令集表征着计算机的基本功能和使用属性,是计算机系统设计中的核心向题。是表征一台计算机性能的重要因素,它的格式与功能不仅直接影响到机器的硬件结构,而且也直接影响到系统软件,影响到机器的适用范围。操作码地址码2.指令的组成◆一条指令一般应包含如下信息:

(1)操作码

(2)操作数的地址

(3)操作结果的地址

(4)下一条指令地址◆指令的基本格式操作码:表示指令应执行的操作和应具有的功能。地址码:表示参与操作的操作数的存放地址或操作结果的存放地址。3.2机器语言指令

3.2.1指令类型与功能

3.2.1.1数据传送指令

将数据从一个地方移到另一个地方(实际是“拷贝”)。

例:◆

8086指令

MOVAL,BL;AL←BLMOVAL,Disp(BX)(SI);AL←((BX)(SI)+Disp)◆IBM370机的成组取指令:成组取R1R3B2D23.2.1.2数据运算指令

包括算术运算指令、逻辑运算指令、移位指令。例:8086指令系统中

ADDAL,BL;AL←AL+BLMULBL;AX←AL×BLANDAL,0FEH;AL←AL∧FEH,即AL的最低位

;清0,其余位不变。

ORAL,0F0H;AL←AL∨F0,即AL的高4位置1,

;其余位不变

TESTAL,00000001B;AL∧00000001BA0=0结果为0;A0=1结果不为0◆移位指令实现对操作数的左、右移位。移位操作指令分为算术移位、逻辑移位和

循环移位三种,可以实现对操作数左移或右移一位或几位。3.2.1.3程序控制指令

控制程序流程的指令,包括:跳转指令(条件或无条件)或分支指令、子程序调用和子程序返回指令、“软中断”指令、停机指令。3.2.2数据类型

数值数据无符号整型数、有符号整型数、浮点数据

布尔类型数据值常以0表示FALSE,以非0表示TRUE

字符数据字符编码标准

(ASCII、EBCDIC、UNICODE、或别的)例:8086指令系统JMPL1

;直接寻址的转移,无条件转移到L1处,JNZ50H

;相对寻址的转移。若操作结果不为0,则转移到当前PC+50H处。设指令地址为1000H,则当前PC=1002H,转移地址为:1002H+50H=1052H3.2.3寻址方式

寻址方式:确定操作数地址的方法。

形式地址:指令中直接给出的地址。

有效地址:形式地址经一定的计算而得到的操作数的实际地址。3.2.3.1直接寻址指令字中直接给出操作数的有效地址。◆例:Intel8086指令

MOVAX,[2000H]

将有效地址为2000H的内存单元的内容读入累加器AX中。◆例如:LDAC5

从内存单元5读取数据并且把数据存储在CPU的累加器中。◆这种方式简单直观,便于硬件实现。但随着存储器容量不断扩大,要寻址整个主存空间,将造成指令长度加长。另外程序位置受到限制。3.2.3.2间接寻址指令中指定的是含有操作数地址的内存单元的地址。至少要进行两次内存访问。例如:LDAC@5

或LDAC

(5)OP…5IR10操作数35操作数的地址105…◆间接寻址的特点①间接寻址比直接寻址灵活,可扩大寻址范围,以短的地址码访问大的存储空间。②采用间接寻址,当操作数地址需要改变时,可不必修改指令,只要修改地址指示字中内容(即存放有效地址的单元内容)即可。③间接寻址需多次访存才能取得操作数,因而降低了指令的执行速度。3.2.3.3寄存器直接寻址和寄存器间接寻址◆寄存器寻址◆与直接和间接寻址方式相似,但指定的是寄存器,而不是内存单元。◆寄存器存取信息的速度比主存快,需要的地址短,可压缩指令长度,有利于加快指令执行速度。但寄存器的数量有限。◆寄存器直接寻址OP寄存器寻址Rn操作数Rn例如:假设寄存器R中存储了数值5,则:

LDAC

R

;把数值5从寄存器R中拷贝到CPU的累加器中例如:假设寄存器R中存储了数值5,则:

LDAC(R)

或LDAC@R

;相当于LDAC

5,从寄存器R中获取地址◆寄存器间接寻址3.2.3.4立即值寻址指定的操作数不是一个地址,而是确实要用到的数据。例如:Intel8086指令

MOVAX,2000H

;将数据2000H存入累加器AX中例如:LDAC#5

;把数据值5移到累加器中OP立即寻址D

这种寻址方式在取指令的同时操作数即被取出,不必再次访问存储器,提高了指令执行速度。但由于指令字有限,使得数据范围受限。3.2.3.5隐含寻址

并不明确地指出操作数,因为总是用到特定的寄存器。例如:

CLAC

;清空CPU中的累加器,即将其值置为0

常用于用堆栈存储数据的CPU中。指令中不需要指定操作数,因为它暗示操作数一定来自堆栈。

堆栈及堆栈操作◆一种按“后进先出”存取顺序进行存取的存储结构◆堆栈操作指令是一种特殊的数据传送指令◆堆栈有两种生成方式自底向上生成方式:栈底占最高地址,栈顶为较低地址,压入数据时,按由高地址向低地址顺序进行,弹出数据(即取出数据)时,由低地址向高地址顺序进行。自顶向下生成方式:与自底向上生成方式顺序相反。自底向上生成堆栈的工作过程◆堆栈操作有两种①压入(进栈)指令:把指定的操作数送入栈顶。

SP←SP减量,(SP)←数据②弹出(退栈、出栈)指令:从栈顶弹出数据,送到指令指定的目的地址中。

目的←(SP),SP←SP增量例:8086的指令系统中进栈指令:PUSHAXSP←SP-1,(SP)←AH,SP←SP-1,(SP)←AL

出栈指令:POPAXAL←(SP),SP←SP+1,AH←(SP),SP←SP+1低地址ALAH高地址SPSP-1SP-1低地址ALAH高地址SP+1SP+1SPALAH3.2.3.6相对寻址将程序计数器PC的当前内容与指令中给出的形式地址相加形成操作数的有效地址。有效地址E=(PC)+Disp◆程序计数器PC的内容一般为现行指令的下一条指令的地址。◆形式地址是操作数地址相对于PC当前内容的一个相对位移量(Disp),位移量可正可负,一般用补码表示。◆在相对寻址中,只要保持位移量不变,就可实现指令带着数据在存储器中浮动,有利于实现程序再定位。KOP相对寻址5K+1K+2┆┆K+6操作数MOP相对寻址5M+1M+2┆┆M+6操作数

例:8086指令JNC03H

的功能为,如果进位为0,则转移到目标地址为(PC)+03H处进行执行。设指令为双字节指令,本条指令地址为1000H。本条指令取指后,PC=1002H转移目标地址为

1002H+0003H=1005H若指令为JNC0FDH

则转移目标地址为1002H+FFFDH=0FFFH0FFDH0FFEH0FFFH××1000HJNC1001H03H1002H1003H1004H1005H××D=FDHD=03H3.2.3.7变址寻址方式和基址寻址1.变址寻址方式

变址寻址方式与相对寻址方式类似,但它是将指令提供的地址与变址寄存器中而不是程序计数器中的内容相加。例如:

Intel8086指令

MOVAL,[BX+4]

设BX=2000H,BX+4=2004H(2004H)=82H,则AL←82H例如:

LDAC5(X)

;变址寄存器X:数值10,则5+10=15

;读取15号单元中的数据并且把它存储在累加器中。◆变址寻址可用于数组、向量、字符串等数据的处理例:

Intel8086指令

LODS;AL←(SI),SI←SI+1SIAAa0A+1a1A+2a2…+12.基址寻址◆操作数的有效地址等于指令中的形式地址与基址寄存器中的内容之和。◆基址寄存器可以是一个专用的寄存器,也可以是由指令指定的一个通用寄存器。◆基址寻址主要用于将用户程序的逻辑地址(用户编写程序时所使用的地址)转换成主存的物理地址(程序在主存中的实际地址)。◆基址寻址与变址寻址在形式上以及有效地址的计算方法上都是相似的,但它们的应用场合是不同的。

基址寻址是面向系统的,主要用于逻辑地址到物理地址的变换,用以解决程序定位问题。基址寄存器由系统程序使用,对用户是透明的。

变址寻址是面向用户的,主要用于访问数组、向量、字符串等成批数据,用以解决程序的循环控制问题。3.2.4指令格式操作码地址码指令的基本格式:指令格式的设计包含两个方面:

1.确定指令的长度;

2.划分指令的字段,定义各字段的位数、含义。一、指令长度◆指令字长度:一个指令字所包含的二进制信息的位数。◆定长指令:指令系统中所有指令的长度都是一样的。◆可变长指令:各指令的长度可以不同。◆指令长度与机器字长二.指令的地址码

考虑的问题:需要多少地址信息及如何给出地址。1.零地址指令格式:

(1)无需任何操作数,如空操作,停机等指令。

(2)所需操作数是隐含指定的,如堆栈运算指令。2.一地址指令格式:意义:

(1)AOP(A)(2)AC(AC)OP(A)OPOPA指令短,节省空间,执行快,常用于微、小型机中。3.二地址指令格式:意义:

A1(A1)OP(A2)

最常用的指令格式,适用于中、小、微型机。OPA1A2◆二地址指令的几种形式①存储器—存储器型(S—S型)指令②寄存器—寄存器型(R—R型)指令③寄存器—存储器型(R—S型)指令OPR1R2OPRnA4.三地址指令格式:意义:

A3(A1)OP(A2)

常用于大、中型机中。OPA1A2A35.多地址指令

考虑一个简单的例子:A=B+C

一个操作:加法三个操作数:两个源操作数——B、C

一个目的操作数——A

假定微处理器可以执行16种不同的操作。需要4位来代表其中的操作(因为24=16)(假设位模式1010→加法)假定仅有4种可能的操作数——A,B,C和D。用两位来表示每一种操作数:

00→A,01→B,10→C,11→D图3.4采用(a)三操作数,(b)二操作数,(c)单操作数,(d)0操作数的指令格式和计算A=B+C的汇编语言程序以及机器代码。

微处理器可以设计成能运行具有3、2、1或0个操作数的指令。

二、指令的操作码

指令系统中的每一条指令都有唯一确定的操作码。操作码位数取决于机器指令系统的规模。

1.固定长度操作码

操作码的长度固定,且集中放在指令字的一

个字段中,其余部分全部用于地址码。此方式有利于简化硬件设计和减少指令译码

时间,用于字长较长的大、中型及超级小型机中。

2.可变长度操作码

操作码的长度允许有几种不同的选择,对地址

数少的指令允许操作码长些,对地址数多的指令,

则操作码就短些。

若指令长度一定,则操作码字段与地址码字

段之间存在平衡问题一般均采用

“扩展操作码”

方法。◆

扩展操作码

目的:在满足需要的前提下,有效地缩短指令字长。例:设某机指令字长为16位,若固定OP为4位,三个地址

码,每个4位,其格式为:OPA1A2A3若采用固定长度操作码,则最多只允许有16种三地址指令。00001111××××××××××××…××××××××××××………15/15/15扩展法

15条三地址指令、14条二地址指令、31条一地址指令、16条0地址指令,共76条指令,其扩展方法如下:00001110××××××××××××…0001××××××××××××××××××××××××………15条三地址指令11111111××××××××…1101××××××××………14条二地址指令000011111111××××…1110××××………31条一地址指令11100000111111111111…………16条0地址指令111111110000111111111111PentiumⅡ的指令格式:

指令长度是可变的,从1个字节到12个字节。MOD字段与R/M字段:5位,表示8个寄存器和24种寻址方法3.3指令集结构设计

一、指令系统的基本要求1.完备性任何运算都可以用指令编程实现。即要求指令系统的指令丰富、功能齐全、使用方便,应具有所有基本指令。2.有效性用指令系统中的指令编写的程序能高效率运行,占用空间小、执行速度快。3.规整性

指令系统具有对称性、匀齐性,指令与数据格式的一致性。◆对称性:所有寄存器和存储单元均同等对待,所有指令可以使用所有寻址方式,减少特殊操作和例外情况。◆匀齐性:一种操作可支持各种数据类型。◆指令与数据格式的一致性:指令长度与数据长度有一定的关系,以便于存取和处理。4.兼容性

二、指令系统的两种设计风格

1.复杂指令系统计算机

CISC

靠增强指令的功能,增加指令系统的复杂程度来提高计算机系统的性能。

特点:

(1)指令系统复杂庞大,指令数目一般多达

200~300条。

(2)指令格式多,指令字长不固定,使用多种不同的寻址方式。

(3)可访存指令不受限制。

(4)各种指令的执行时间和使用频率相差很大。

(5)大多数采用微程序控制器。2.精简指令系统计算机RISC

靠精简指令系统,简化指令功能及优化的编译程序来提高计算机系统的性能。特点:

(1)选取使用频率高的简单指令以及很有用但又不复杂的指令组成指令系统。

(2)指令数少,指令长度一致,指令格式少,寻址方式少,指令总数大都不超过100条。

(3)以寄存器—

寄存器方式工作,只有取数/存数

(LOAD/STORE)指令访问存储器,其余指令的操作都在寄存器之间进行。

(4)采用指令流水线调度,使大部分指令在一个机器周期内完成。(5)使用较多的通用寄存器以减少访存。(6)以组合电路控制为主,不用或少用微程序控制。(7)

采用优化编译技术,力求高效率支持高级语言的实现。3.4相对简单的指令集结构存储器模型:该微处理器可以访问64K(=216)字节

的存储器(每字节8位)或者64K×8的

存储器。从外部设备输入数据和输出数

据到外部设备,都可以被看作是访问内

存。三个寄存器:累加器(AC)、寄存器R、1位零标志Z。16条指令,每一条都是8位指令码,见表3.1。表3.1相对简单CPU的指令集

LDAC、STAC、JUMP、JMPZ和JPNZ指令都需要16位的存储地址。这些指令在存储器中每个都需要3字节。第一个字节包含指令的操作码,另外两字节对应地址。

3字节格式1字节格式

相对简单CPU的指令格式:例如:25:JUMP1234H该指令以如下形式存储在存储器中:

25:00000101(JUMP)

26:00110100(34H)

27:00010010(12H)注意:第二字节低8位,第三字节高8位指令集结构的用法举例:用相对简单CPU编程计算1+2+……+n

则其高级语言的代码片断如下:

可以把数值n存储在标明为n的存储单元中,结果存在标明为total的内存单元处,内存单元i用于存储求和的次数。确定运算步骤如下:

total=0;

FORi=1TOnDO{total=total+i};

1:total=0,i=02:i=i+13:total=total+i4:IFi≠nTHENGOTO2实现这一算法的相对简单CPU的代码如下:

CLACSTACtotalSTACiLoop:LDACiINACSTACiMVACLDACtotalADDSTACtotalMVACLDACnSUBJPNZLooptotal=0,i=0i=i+1total=total+iIFi≠nTHENGOTOLoop下表显示了当n=5时代码的运行过程:表3.2循环求和程序的执行步骤

怎样看待这个指令集结构?

它满足了以教学为目的的设计目标。当我们在第6和7章中设计这种CPU时我们就会看到,其复杂度足以阐明很多CPU的设计原则,却又没有掉进自身复杂度的陷阱中。对于简单的应用程序来说,指令集完整。如果一个应用程序需要使用浮点型数据,它就不是十分完整。对于通用计算机(例如个人计算机),该指令集显然是不够的。该指令集是相当正交的。只是多了OR指令,但有时CPU的指令集不是完全正交更好一些。

寄存器组是它最大的弱点。寄存器的缺乏导致执行任务较慢,并且降低了性能。3.5实例:8085微处理器指令集结构3.5.18085微处理器的寄存器组

通用数据寄存器:

累加寄存器A-总是接收一个8位的算术或逻辑指令的结果;也为所有采用二操作数的指令提供一个操作数。

六个通用寄存器

-命名为B,C,D,E,H和L

,可成对访问:B和C,D和E,H和L

。寄存器对HL常用来指向内存单元。

16位的堆栈指针寄存器SP:包含堆栈顶部的地址。

5个标志,共同称为标志寄存器:●

符号标志S:表明算术或逻辑指令计算出的结果的符号。其中,值1表示负数;值0表示正数(或零)。●

零标志Z:如果算术或逻辑运算指令产生的结果为0,则将Z置为1;否则Z为0。●

奇偶标志P:如果算术或逻辑运算结果中有偶数个1,则将P置为1;否则P为0。●

进位标志CY:当算术运算产生进位时才去设置它。

辅助进位标志AC:与进位标志类似。它不指明进位值,但指出从结果的低四位向高四位传递了进位。例如,加法00001111+00001000=00010111中断标志寄存器IM:用于允许和禁止中断而且检查待处理的中断。程序员可以读取并且设置该寄存器中的值来处理中断。

例如,加法11110000+10000000=101110000,对两个8位值相加但产生了9位结果。最左边的1被存储在CY中;如果加法不产生进位1,则CY中会存储0。3.5.28085微处理器指令集

8085指令集总共包含了74条指令。可分为三个部分:数据传送指令、数据运算指令和程序控制指令。采用如下记号描述:

r,r1,r2:表示任何一个8位寄存器A,B,C,D,E,H,或者L。

M:表示内存单元。M[HL]表明该内存单元的地址存在寄存器对HL中。

rp:表示寄存器对BC,DE,HL,或者堆栈指针SP。

Г:一个16位地址或者数据。●

n:是一个存储在内存中且紧跟操作码后的8位地址或者数据值。●

cond:条件指令的一个条件。值为:NZ、Z、P、N、PO、PE、NC、C。除了POPPSW指令外,其它指令都不会修改标志的值。

(PSW:处理器状态字(保存累加器和标志器中的内容

))表3.38085微处理器的数据传送指令

(立即寻址)(直接寻址)

指令的通用格式。一些指令有指定寄存器的字段,而另一些指令这些部分却是固定的。

图3.68085的指令格式一字节二字节数据运算指令大多数会影响表中的标志。

表3.48085微处理器的数据运算指令

13条程序控制指令。DI,EI,RIM和SIM包含在此因为它们可以处理中断,而中断最终又会影响程序控制。这些指令都不修改标志。

表3.58085微处理器的程序控制指令

3.5.3一个简单的8085程序

计算和1+2+……+n,并且把结果存储于内存单元total中。n值最初存于标志为n的内存单元中。

当设计此程序时,我们计算如n+(n-1)+……+1形式的总和。

算法如下:

与相对简单CPU中的程序不同,8085程序把它的运行值存储在CPU寄存器中。寄存器B包含数值i,总和存储在寄存器A

温馨提示

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

评论

0/150

提交评论