计算机组成原理教学教案第五章文档格式.docx
《计算机组成原理教学教案第五章文档格式.docx》由会员分享,可在线阅读,更多相关《计算机组成原理教学教案第五章文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
⑷三地址指令
OPCode表示操作码,A1表示第一个操作数的存储器地址或寄存器名,A2表示第二个操作数的存储器地址或寄存器名,A3表示操作结果的存储地址。
这类指令有三个操作数地址,操作后A1、A2中的操作数均保持原来数据,操作结果存入A3中。
这类指令用于字长较长的大、中型机中。
⑸多地址指令
这类指令有3个以上的操作数地址,指令码长,在某些性能较好的大、中型机以及高档小型机中采用,如字符串处理指令、向量、矩阵运算指令等。
一般说来,零地址指令、一地址指令和二地址指令的指令码长短,具有所需存储空间少,执行速度快,硬件实现简单等优点,为结构简单的微、小型机所采用;
在字长较长、功能较强的大、中型机中除采用零地址指令、一地址指令和二地址指令外,也使用三地址指令和多地址指令。
在计算机中,指令和数据都是以二进制码的形式存储的,机器是如何区分和判别呢?
5.1.3指令格式举例
以具有典型指令系统意义的PDP-11系列小型机的指令系统为例说明,这是一种定长指令、变长操作码、双地址指令系统,指令长度为16位,具有多种不同的指令格式。
5.1.4指令操作码的编码格式
⒈固定格式
操作码的长度是固定的,且集中放在指令字的某一个字段中。
这种格式的优点是简化硬件设计,减少指令的译码时间,但操作码的平均长度长,需要指令字长长。
一般在字长较长的大中型机以及超级小型机上使用。
若某机器的操作码长度为n位,在固定格式下,它最多只能编制2n条不同的指令。
⒉可变格式
操作码的长度可变,且分散地放在指令字的不同字段中。
优点是可压缩操作码的平均长度,控制器的设计相对较为复杂,指令的译码时间也较长。
一般在字长较短的微小型机上广为采用。
可变格式的指令操作码编码格式,通常是在指令字中用一个固定长度的字段来表示基本操作码,而对于一部分不需要某个地址码的指令,把它们的操作码扩充到该地址字段中去,以能表示更多的指令。
如某机器的指令长度为16位,以4位为1个字段,分成4个字段,一个4位的操作码字段,3个4位的地址码字段,其指令格式为:
用可变格式编码,要表示15条三地址指令,15条二地址指令,15条一地址指令和16条零地址指令,共表示61条指令,则可以如下安排:
⑴三地址指令15条:
其操作码由4位基本操作码的0000~1110给出,剩下的一个编码1111用于把操作码扩展到A1字段。
⑵二地址指令15条:
操作码扩展到A1字段,则操作码有8位,可从11110000~11111111,用11110000~11111110作为15条二地址指令的操作码,剩下的一个编码11111111用于把操作码扩展到A2字段。
⑶一地址指令15条:
操作码扩展到A2字段,则操作码有12位,可从111111110000~111111111111,用111111110000~111111111110作为15条一地址指令的操作码,剩下的一个编码111111111111用于把操作码扩展到A3字段。
⑷零地址指令16条:
操作码扩展到整个指令字,则操作码有16位,可从111111*********0~111111*********1。
指令操作码扩展技术的扩展原则
使用频度高的指令应分配短的操作码,使用频度低的指令相应分配较长的操作码。
这样不仅可以有效地缩短操作码在程序中的平均长度,节省存储器空间,而且缩短了经常使用的指令的译码时间,提高指令的执行速度,也提高了程序的运行速度。
5.1.5指令字长度与机器字长的关系
指令字长度:
一个指令字中所包含的二进制数码的位数。
机器字长:
是指计算机的运算部件一次能直接处理的二进制数据的位数,一般简称为字长,它是计算机的一项重要的技术指标。
字长主要决定计算机的运算精度,字长越长,计算机的运算精度就越高。
字长对计算机指令的直接寻址能力也有直接影响,字长长,寻址空间相对较大。
指令字长与机器字长有着密切的关系。
一般机器字的长度都是字节的1、2、4、8倍,计算机指令的长度主要取决于操作码的长度、操作数地址的长度和操作数地址的个数。
由于指令格式的不同,一台机器上的各条指令长度是不一样的,为了充分利用存储空间,指令的长度通常采用字节的整数倍。
指令长度与机器的字长没有固定的关系,指令长度可以小于机器的字长,也可以大于机器的字长。
一般在字长较短的微小型机中,大多数指令的长度大于机器字长;
而在字长较长的大中型机中,大多数指令的长度是小于或等于机器的字长。
长度大于机器字长的指令称为长指令格式,而长度小于或等于机器字长的指令称为短指令格式。
在同一台计算机中,可能同时存在长指令格式和短指令格式。
5.1.6指令助记符
机器语言存在着可读性差,不易编程和不易维护等许多缺点。
为了克服这个缺陷,我们用预先规定的符号分别来代替指令中用二进制数码表示的操作码、操作数或地址,用便于记忆的符号而不是二进制数码来编写程序就要方便得多。
例如ADD表示加法操作
SUB表示减法操作
MUL表示乘法操作
…
ADD、SUB、MUL等符号就是助记符。
用助记符来表示二进制数码指令序列的语言,称为汇编语言,它实际上是与机器语言是一一对应的。
5.2寻址方式
5.2.1寻址方式和有效地址的概念
⒈寻址方式的概念
所谓寻址,就是寻找操作数的地址。
寻址方式就是寻找操作数地址的方式,也称编址方式。
在程序的执行过程中,执行每一条指令都需要寻找操作数。
操作数所在地址有如下3种情况:
⑴存储器寻址:
操作数在内存储器中。
这时指令的地址码部分指明了操作数所在的内存单元的地址。
⑵寄存器寻址:
操作数在运算部件的某个寄存器中。
这时指令的地址码部分指明了CPU中的一个寄存器。
⑶立即数寻址:
操作数就在指令中。
指令的地址码部分就是操作数本身,这种操作数叫做立即数。
⒉有效地址的概念
操作数的地址被称为有效地址,用EA表示,在Intel32位微处理器的存储器寻址方式下,有效地址由下面4个分量构成:
⑴基址寄存器内容
⑵变址寄存器内容
⑶位移量
⑷比例因子(取值为1、2、4或8)
有效地址的计算方法为:
EA=基址+(变址×
比例因子)+位移量
⒈隐含寻址方式
隐含寻址方式是指操作数隐含在CPU的某个通用寄存器或内存的某指定单元中,指令中不直接给出操作数或操作数地址。
优点是可缩短指令的长度,这是在字长较短的微、小型机上普遍采用的寻址方式。
如在Intel8086/8088中的乘法指令
MULOPR
MUL是操作码,表示乘法,OPR是乘数,而被乘数则隐含在累加器AX(16位乘法)或AL(8位乘法)中。
⒉立即数寻址方式
操作数由指令的地址码部分直接给出的寻址方式称为立即数寻址方式。
当取出指令时,操作码和操作数同时被取出,不必再去访问存储器,因此这类寻址方式的指令执行速度快。
这种方式适用于操作数固定的情况。
通常用于给某一个寄存器或存储器单元赋初值或提供一个常数等。
例如,Intel8086/8088的传送指令
MOV,AX,imm
由立即数imm直接给出的操作数传送到累加器AX中。
⒊直接寻址方式
指令的地址码部分给出的不是操作数,而是操作数在存储器中的存储地址。
这种寻址方式简单、直观,也便于硬件实现,指令执行速度较快,但是操作数的地址是指令的一部分,不能修改,因此只能用于访问固定存储器单元的指令。
如,Intel8086/8088的传送指令MOVAX,[address]
⒋寄存器寻址方式
指令的地址码部分给出的是存放操作数的某一通用寄存器名的寻址方式称为寄存器寻址方式。
其有效地址为:
EA=R
这种寻址方式的地址码较短,而且从寄存器中存取数据比从存储器中取数快得多,故这种寻址方式可以缩短指令的长度,节省存储空间,提高指令的执行速度,在现代计算机中得到广泛的应用。
⒌间接寻址方式
指令的地址码部分给出的不是操作数,也不是操作数的地址,而是操作数地址的地址的寻址方式,简称简址。
其有效地址为:
EA=(A0)
⒍寄存器间接寻址方式
指令的地址码部分给出的是寄存器名,寄存器中存放了操作数的地址,这种寻址方式称为寄存器间接寻址方式。
EA=(R)
这种简址寻址方式只需一次访问存储器,可以提高指令的执行速度,在大多数计算机中被广泛采用。
⒎变址寻址方式
以变址寄存器中的内容为基址,加上指令地址码部分给出位移量之和作为操作数的地址来获得操作数地址的寻址方式。
EA=(R)+A
这类指令通常用于字符串处理、向量运算等成批数据处理中
⒏相对寻址方式
把程序计数器PC的当前内容与指令地址码部分给出的地址(经常是位移量)之和作为操作数地址的寻址方式。
有效地址为:
EA=(PC)+A
⒐基址寄存器寻址方式
在这种寻址方式中,把主存的整个存储空间分成若干段,段的首地址存放于基址寄存器中,段内位移量由指令直接给出。
操作数在存储器的存储地址就等于基址寄存器RB的内容(即段首地址)与段内位移量A之和。
EA=(RB)+A
优点是可通过修改基址寄存器的内容就可以访问存储器的任一单元。
基址寻址技术原先用于大、中型机中,现已被移植到微、小型机上。
5.2.2基本寻址方式
5.2.3寻址方式举例
以PDP-11系列机为例,说明计算机指令系统的寻址方式。
(参看教材表5.1)PDP-11系列机的指令字长为16位,指令有单操作数指令和双操作数指令两类,其地址码字段的长度均为6位二进制数。
5.3指令的种类
5.3.1数据传送类指令
这类指令包括数据传送、数据交换、压栈和退栈指令三种指令。
⒈数据传送指令
这是一种常用指令,用以实现寄存器与寄存器、寄存器与存储单元、存储单元与存储单元之间的数据传送。
数据传送时,数据从源地址传送到目的地址,源地址中的数据保持不变,这实际上是一种数据复制。
如Intel8086/8088的MOVS指令,一次传送一个字或一个字节。
应注意,有些计算机的数据传送指令不能实现存储单元与存储单元之间的数据传送,如Intel8086/8088的传送指令MOV。
⒉数据交换指令
这类指令的功能是实现两个操作数之间的位置互换,这两个操作数可以是两个寄存器操作数,或一个寄存器操作数与一个存储器操作数,或两个存储器操作数。
数据交换指令实现了数据的双向传送,一条数据交换指令起到了三条数据传送指令的作用。
也应注意,有些计算机的数据交换指令不能实现存储单元与存储单元之间的数据互换,如Intel8086/8088的XCHG指令。
⒊压栈和退栈指令
压栈指令功能是把数据存入堆栈区,而退栈指令的功能是把数据从堆栈中弹出。
堆栈是主存中专门用来存放数据的一个特定的区域,是由若干连续的存储单元组成的按照先进后出(FILO)原则存取数据的存储区。
⑴栈底以下是非栈区,不能放入数据,栈底以上是栈区,可存放数据。
⑵为了指示栈顶的位置,需要有一个堆栈指示器(或称堆栈指针)SP。
用于访问堆栈的指令有压栈指令和退栈指令,压栈指令(在Intel8086/8088中是PUSH)用来把指定的操作数送入堆栈的栈顶,而退栈指令(在Intel8086/8088中是POP)则用来把栈顶的数据取出。
压栈和退栈示意图
5.3.2算术逻辑运算类指令
这类指令包括算术运算指令、逻辑运算指令和移位指令。
⒈算术运算指令
算术运算指令有二进制数的加、减、比较和求补,乘、除运算指令,浮点运算指令,以及十进制运算指令等。
执行算术运算指令后,通常都要根据算术运算的结果置状态寄存器的状态位。
⒉逻辑运算指令
一般计算机都具有与、或、非(求反)、异或(按位加)和测试等逻辑运算指令。
有些计算机还具有位测试、位清除、位求反等位操作指令。
⒊移位指令
移位指令可分为算术移位、逻辑移位和循环移位三类指令,移位又有左移和右移,这样,就有算术左移指令、算术右移指令、逻辑左移指令、逻辑右移指令、不带进位位左循环移位指令、不带进位位右循环移位指令、带进位位左循环移位指令和带进位位右循环移位指令8种基本移位指令。
一般计算机都具有这些移位指令。
5.3.3字符串处理指令
字符串处理指令主要用于非数值数据的处理。
它包括
字符串传送
字符串转换
字符串比较
字符串查找
字符串匹配
字符串抽取和替换等指令。
5.3.4输入/输出(I/O)指令
输入/输出指令是完成主机或CPU与输入/输出设备之间传送数据的命令。
输入/输出指令的一般格式为:
其中,OP为操作码,表示I/O指令;
REG是寄存器名,用于指定与外部设备交换数据的CPU中的寄存器,A是外部设备中的寄存器地址或设备码。
有些计算机,例如DEC公司的PDP-11,是把外设与存储器统一编址,把外设看成是一个存储单元,这类计算机没有输入输出指令,其输入输出功能由访问存储器的指令来实现。
5.3.5特权指令和陷阱指令
⒈特权指令
特权指令是指具有特殊权限的指令,这类指令一般单用户、单任务的计算机系统不需要,而多用户、多任务的计算机系统在用于系统资源分配与管理上是必不可少的。
这类指令的功能包括:
改变系统的工作方式,检测用户的访问权限,修改虚拟存储器管理的段表、页表,完成任务的创建和切换等。
为了安全,这类指令一般不直接提供给用户使用。
⒉陷阱指令
所谓陷阱指令是处理陷阱的指令。
5.3.6转移指令
转移指令是改变程序执行顺序的指令。
一般情况下,CPU是按编程顺序执行指令的,但有时要根据所处理的结果进行判断,再根据判断的结果来确定程序的执行,这时就要使用转移指令,以实现程序的分支。
转移指令分为无条件转移和条件转移两类指令。
⒈无条件转移指令
无条件转移指令不受任何条件的约束,直接控制CPU转移到指定的地点去执行。
如
Intel80386/80486中的无条件转移指令JMP
⒉条件转移指令
条件转移指令则先测试某些条件,条件满足就转移,否则不转移。
条件转移指令判断条件是CPU中是状态寄存器标志位,主要有:
进位标志(C)、结果为零标志(Z)、结果为负标志(N)、结果溢出标志(V)、奇偶标志(P)。
具体指令请参看教材表5.2条件转移指令一览表。
5.3.7子程序调用指令
子程序调用指令包括调用指令(转子指令)和返回指令(返主指令)。
调用子程序需要用到调用指令。
子程序执行完毕,就需要用返回指令返回到主程序。
要注意子程序调用指令和转移指令的区别。
①目的地址不同
②用途不同
③方式不同
5.3.8处理器控制指令
处理器控制指令是直接控制CPU实现某种功能的指令。
包括状态标志位的操作指令、停机指令、等待指令、空操作指令、封锁总线指令等。
5.4指令的执行方式
在目前的计算机中,指令的执行有三种方式:
顺序执行方式
重叠执行方式
流水线方式
顺序执行方式是一条指令接着一条指令的执行方式。
顺序执行方式的特点:
⑴就整个程序而言,是一条指令接着一条指令顺序地串行执行的。
⑵就一条指令而言,其取指、分析、执行三个步骤也是顺序串行进行的。
⑶这种执行方式的优点是控制简单,硬件容易实现,但执行速度慢。
多条指令在执行时在时间段上有重叠的执行指令方式称为重叠执行方式。
重叠执行方式的特点:
⑴就每条指令而言,其内部的各个操作仍为顺序串行执行;
⑵从相邻两条指令来看,它们的某些操作是同时进行的;
⑶其优点是明显的提高了指令的执行速度;
⑷缺点是这种执行方式技术较复杂。
流水线方式是把指令的执行过程分解为若干个子过程,分别由不同的硬件去执行的方式。
通常把指令的执行过程分为取指、译码、取操作数和执行4个子过程,分别由取指、译码、取操作数和执行4个装置来执行。
流水线的指令执行方式的特点:
⑴就每条指令而言,其各子过程内仍为顺序串行执行,即未改变一条指令的执行时间。
⑵每个子过程执行完毕,由于该装置已空闲,即可接收下一条指令的该子过程执行。
流水线执行方式明显的加快了程序的执行速度。
5.4.1指令的顺序执行方式
5.4.2重叠执行方式
5.4.3流水线方式
5.4.4指令的执行过程
1.有关指令周期的概念
⑴指令周期:
执行一条指令所需要的时间。
也就是从取指令开始到执行完这条指令为止的全部时间。
一个指令周期由若干个机器周期组成。
⑵CPU周期:
也叫机器周期。
是指CPU访问一次主存或输入输出端口所需要的时间。
一个CPU周期由若干个时钟周期组成。
⑶时钟周期:
是CPU处理操作的最小时间单位,也叫T周期、T状态。
指令周期、CPU周期和时钟周期之间的关系
上图所示的某条指令的指令周期由3个CPU周期组成,第一个CPU周期TC1由4个时钟周期组成,第二个CPU周期TC2也由4个时钟周期组成,第三个CPU周期TC3由3个时钟周期组成。
⑷取指和取指周期
从主存储器中读出指令,称为“取指”,读出一条指令所需的时间称为“取指周期”。
同一机器的所有指令的取指周期都相同。
一般计算机取指周期的时间是一个CPU周期时间。
⑸执行指令和执行时间
取指操作后实现指令功能的全过程称为“执行指令”,执行一条指令所需的时间为“执行时间”。
指令不同其执行时间也不同,一般一条指令的执行时间需要1个到若干个CPU周期时间。
取指周期和执行时间之和称为指令周期,即从取指开始到指令执行结束所需的总时间。
【例】某型号微型计算机的一条指令周期由4个机器周期组成,而每个机器周期由4个时钟周期组成,该机的主频为1.3GHz,试求:
①该机器的时钟周期为多少?
②执行一条指令所需的时间是多少?
③该机器在1s内可执行多少条这样的指令?
解:
①因为主频f=1.3GHz,所以时钟周期T=1/f=1/(1.3×
109)=0.7692307×
10-9s=0.7692307ns
②4×
4×
0.7692307ns=12.307891ns
③N=1/12.307891×
109=0.08125×
109=8.125MIPS
⒉指令执行过程简析
以三种基本指令——数据传送、加法运算和转移指令的执行过程,来说明一般指令在指令执行过程中的共同规律。
⑴数据传送指令
指令形式:
MOVR1,R2
解释:
该指令是把源寄存器R1的内容传送到目的寄存器R2中。
操作过程:
该指令执行的三个过程——取指、分析、执行。
①取指:
程序计数器的PC内容(指令地址)装入地址寄存器MAR,送地址总线,然后由地址总线选中所在的主存单元,取出该指令代码,经数据总线输入CPU中指令寄存器IR。
②分析(指令译码):
指令操作码经指令译码后,识别出这是一条从寄存器R2到R1的寄存器传送指令;
R1、R2的地址码经地址译码器找到R1、R2所对应寄存器。
在指令译码的同时,程序计数器PC的内容加1,以指向下一条指令,保证程序的顺序执行。
③执行:
根据指令的译码结果,以及所选中的R1、R2寄存器,控制器发出相应的控制信号,有序的开启三态门,通过数据总线进行数据传送操作,将R2中的数据传送到R1中。
⑵加法指令
ADDEA
该指令指定的一个操作数是累加器AC中的值,EA为存放另一个操作数的主存单元有效地址,指令的功能是把累加器AC和有效地址为EA的主存单元的内容相加,其和送回到累加器AC中。
即实现(AC)+(EA)→AC。
指令操作码经指令译码后,识别出这是一条累加器AC与主存单元相加的加法指令,IR中的数据地址EA输出到地址总线上,然后从主存单元中读出数据,经数据总线装入CPU中的暂存寄存器TR中。
AC中的数据与TR中的数据送入ALU进行加法操作,两数之和由ALU输出,经数据总线输入AC中。
⑶转移指令
JMPEA
该指令是无条件转移到以EA为转移地址的转移指令。
指令操作码经指令译码后,识别出这是一条无条件转移指令。
把指令码中的地址码部分----转移地址EA送上数据总线,在装入程序计数器PC,至此,无条件转移指令结束。
总结:
指令操作可以分解为取指和执行两部分。
取指部分对不同的指令基本上都是相同的,执行操作,不同的指令是不同的。
一般要做一下几个内容:
①识别指令的功能和类型;
②产生操作数的地址;
③取操作数;
④执行功能操作,获得操作结果;
⑤存储结果。
5.5精简指令计算机(RISC)的指令系统
5.5.1RISC的由来与发展
⒈RISC的由来
CISC计算机的