《第六章指令系统精选文档.ppt》由会员分享,可在线阅读,更多相关《第六章指令系统精选文档.ppt(48页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第六章指令系统本讲稿第一页,共四十八页第6章 指 令 系 统 指令是使计算机完成某种操作的指示或命令,又称为机器指令。计算机完成的各种功能,就是执行各种指令的体现。所谓指令系统(Instruction Set)是指一台计算机上全部指令的集合,也称指令集。它反映了该计算机的全部功能,机器类型不同,其指令系统也不同,因而功能也不同。在计算机系统的设计过程中,指令系统的设计占有十分重要的地位,合理的指令系统能够提升计算机系统的性能。指令系统的设置和机器的硬件结构密切相关,一台机器要有较好的性能,必须设计功能齐全、通用性强、指令丰富的指令系统,这就需要复杂的硬件结构来支持。本章介绍指令的格式、指令的寻
2、址方式、指令的种类以及指令的执行方式等内容。6.1 指令的分类6.2 指令格式6.3 寻址方式6.4 指令的执行6.5 小结本讲稿第二页,共四十八页6.1指令的分类6.1.1 数据传送类指令 数据传送类指令主要包括数据传送、数据交换、压栈和退栈三种指令。这类指令主要用来实现主存和寄存器之间,或寄存器和寄存器之间的数据传送。1数据传送指令 这是一种常用指令,用以实现寄存器与寄存器、寄存器与存储单元、存储单元与存储单元之间的数据传送。进行数据传送时,数据从源地址传送到目的地址,源地址中的数据保持不变,这实际上是一种数据复制。应该注意,有些计算机的数据传送指令不能实现存储单元与存储单元之间的数据传送
3、,如 Intel8086/8088的传送指令MOV。2数据交换指令 这种指令的功能是实现两个操作数之间的位置互换,包括寄存器与寄存器、寄存器与存储单元、存储单元与存储单元之间的数据互换。同样应该注意的是,有些计算机的数据交换指令不能实现存储单元与存储单元之间的数据互换,如 Intel8086/8088的XCHG指令就没有这种功能。本讲稿第三页,共四十八页6.1指令的分类3压栈和退栈指令 压栈和退栈指令都是针对堆栈进行操作的指令。堆栈(Stack)是主存中专门用来存放数据的一个特定的区域,是由若干连续的存储单元组成的按照先进后出(FILO)原则存取数据的存储区。压栈指令的功能是把数据存入堆栈区,
4、而退栈指令的功能是把数据从堆栈中弹出。堆栈有两种存放数据的方向,一种是由低地址向高地址存放,另一种是由高地址向址低地址存放,通常采用后者,如图6-1所示。本讲稿第四页,共四十八页6.1指令的分类对图6-1说明如下:(1)栈底以下是非栈区,不能放入数据,栈底以上是栈区,可存放数据。(2)为了指示栈顶的位置,用一个寄存器或存储器单元来指出栈顶的地址,这个寄存器或存储器单元称为堆栈指针(Stack Pointer SP)。栈顶以上的数据为无效数据。SP的内容就是栈顶地址。用于访问堆栈的指令只有压栈和退栈两条指令,压栈指令(在Intel80868088中是PUSH)用来把指定的操作数送人堆栈的栈顶,而
5、退栈指令(Intel80868088中是POP)则用来把栈顶的数据取出。图6-2表示了压栈和退栈的过程。本讲稿第五页,共四十八页6.1指令的分类6.1.2 算术逻辑运算类指令这类指令包括算术运算指令、逻辑运算指令和移位指令。1算术运算指令 算术运算指令包括二进制定点加、减、乘、除指令,浮点加、减、乘、除指令,求反、求补指令,算术比较指令,十进制加、减运算指令等。不同档次的计算机具有不同数量的算术运算指令,一般微、小型机的硬件结构比较简单,支持的算术运算指令比较少,只设有二进制数的加、减、比较和求补等最基本的指令。高档的机器,除了这些最基本的算术运算指令外,还具有乘、除运算指令,浮点运算指令,以
6、及十进制运算指令等。浮点运算指令主要用于需要大量数值运算的科学计算中,而十进制运算指令主要用于需要大量输入输出的商业数据处理中。大型机和巨型机则还设有向量运算指令,可以直接对整个向量或矩阵进行求和、求积等运算。本讲稿第六页,共四十八页6.1指令的分类2逻辑运算指令 一般计算机都具有与、或、非、异或和测试等逻辑运算指令。有些计算机还具有位测试、位清除、位求反等位操作指令。这些指令主要用于无符号数的位操作、代码的转换、判断及运算。3移位指令 移位指令用来对寄存器的内容实现左移、右移或循环移位的功能,可分为算术移位、逻辑移位和循环移位三种指令,一般计算机都具有这三种指令。图6-3显示了这三种移位指令
7、的操作过程。本讲稿第七页,共四十八页6.1指令的分类图6-3 移位指令操作过程本讲稿第八页,共四十八页6.1指令的分类6.1.3字符串处理指令 字符串处理指令对于非数值数据的处理非常重要,由于现在数据处理已是计算机的主要应用领域,因此无论是巨型机、大中型机,还是微、小型机,都设有字符串处理指令。这类指令包括字符串传送、字符串转换、字符串比较、字符串查找、字符串匹配、字符串抽取和替换等指令。这类指令可以在文字编辑中对大量字符串进行处理。例如,Intel80868088中的字符串比较指令:REPZ CMPSB 这是一条无操作数的隐含指令,其含义是对两个字符串逐个进行比较,这两个字符串的首地址分别隐
8、含在源变址寄存器SI和目的变址寄存器DI中,字符串的长度隐含在CX寄存器中。从首地址开始,一个字节一个字节地进行比较,每比较一次,SI和DI的内容自动加1,直至发现两个字符串中有不同的字节或直到比较结束。然后,根据最后一次比较结果设置状态位。本讲稿第九页,共四十八页6.1指令的分类6.1.4输入输出指令 在计算机系统中,输入输出是相对于主机或者CPU而言的。数据从输入设备传送到主机或CPU,称为输入;而数据从主机或CPU传送到输出设备则称为输出。输入输出指令主要用来启动外围设备,检查测试外设的工作状态,完成主机或CPU与输入输出设备之间的数据传送。这类指令对各种类型的计算机都是很重要的。有些计
9、算机,例如 DEC公司的 PDPll,是把外设与存储器统一编址,把外设看成是一个存储单元,这类计算机没有输入输出指令,其输入输出功能由访问存储器的指令来实现。本讲稿第十页,共四十八页6.1指令的分类6.1.5 特权指令和陷阱指令1特权指令 所谓特权指令是指具有特殊权限的指令。这类指令只用于操作系统或其他系统软件,一般不直接提供给用户使用。通常在单用户、单任务的计算机系统中是不需要特权指令的,而多用户、多任务的计算机系统在进行系统资源分配与管理上是离不开特权指令的。这类指令的功能包括:改变系统的工作方式,检测用户的访问权限,修改虚拟存储器管理的段表、页表,完成任务的创建和切换等。2陷阱指令 陷阱
10、指令并非设置陷阱的指令,而是处理陷阶的指令。陷阶是指计算机系统在运行中的一种意外事故,诸如电源电压不稳、存储器校验出错、输入输出设备出现故障、用户使用了未定义的指令或特权指令等等意外情况,使得计算机系统不能正常工作。一旦出现陷阶,计算机应当能暂停当前程序的执行,及时转入故障处理程序进行相应的处理。本讲稿第十一页,共四十八页6.1指令的分类6.1.6 转移指令 转移指令是改变程序执行顺序的指令。一般情况下,CPU是按编程顺序执行指令的,但有时要根据所处理的结果进行判断,再根据判断的结果来确定程序的执行,这时就要使用转移指令,以实现程序的分支。转移指令分为无条件转移和条件转移两类指令。无条件转移指
11、令不受任何条件的约束,直接控制CPU转移到指定的地点去执行;有条件转移指令则先测试某些条件,条件满足就转移,否则不转移。条件转移指令判断条件是利用CPU中的状态寄存器(又称条件码寄存器),这个状态寄存器中有某些标志位,主要有:进位标志(C)、结果为零标志(Z)、结果为负标志(N)、结果溢出标志(V)、奇偶标志(P)。根据转移条件的不同,转移指令可分为若干种,如表6-1所示。本讲稿第十二页,共四十八页6.1指令的分类表6-1 条件转移指令一览表指令条件说明有进位转移C无符号数比较时小于,C标志位为1则转移无进位转移C无符号数比较时大于或等于,C标志位为0则转移零转移Z运算结果为零,Z标志位为1时
12、转移非零转移Z运算结果不为零,Z标志位为0时转移负转移N运算结果为负,N标志位为1时转移正转移N运算结果不为负,N标志位为0时转移溢出转移V运算结果发生溢出,V标志位为1时转移非溢出转移V运算结果不发生溢出,V标志位为0时转移奇转移P运算结果有奇数个1,P标志位为1时转移偶转移P运算结果有偶数个1,P标志位为0时转移无符号小于等于转移C+Z无符号数比较时小于或等于,C标志位或Z标志位为1则转移无符号大于转移C+Z无符号数比较时大于,C标志位和Z标志位为0则转移有符号小于转移NV有符号数比较时小于,NV标志位不为0则转移有符号大于或等于转移NV有符号数比较时大于或等于,NV标志位为0则转移有符号
13、小于或等于转移(NV)+Z有符号数比较时小于或等于,NV标志位不为0或Z标志位为1则转移有符号大于转移(NV)+Z有符号数比较时大于,NV标志位和Z标志位为0则转移本讲稿第十三页,共四十八页6.1指令的分类6.1.7 子程序调用指令 子程序调用指令包括转子指令和返主指令。在进行程序设计时,一般都把常用的程序段编写成独立的子程序或过程,在需要时随时调用。调用子程序需要用到转子指令。子程序执行完毕,就需要使用返主指令返回到主程序。转子指令的格式为:执行转子指令时,通常采用堆栈来保存返回地址,即把下条指令的地址压入堆栈中保存,然后才转入所调用的子程序中执行,子程序执行完毕,由返主指令把压入堆栈的返回
14、地址从堆栈中弹出,返回调用程序。子程序调用和返回的过程如图 6-4所示。操作码目的地址本讲稿第十四页,共四十八页6.1指令的分类 子程序调用指令和转移指令都是改变程序的执行顺序的,但两者有本质的区别,主要区别是:目的地址不同。子程序调用指令的目的地址是子程序的首地址,而转移指令的目的地址是在本程序内。用途不同。子程序调用指令用于实现程序与程序之间的转移,而转移指令一般只用于实现同一程序内的转移。此外,子程序调用指令还可以进行嵌套调用,即可调用别的子程序,还可以实现递归调用,即直接或间接自己调用自己。而转移指令不能做到这些。6.1.8处理器控制指令处理器控制指令是直接控制CPU实现某种功能的指令
15、。包括状态标志位的操作指令、停机指令、等待指令、空操作指令、封锁总线指令等。本讲稿第十五页,共四十八页6.2 指令格式 指令格式是指一条指令由什么样的代码组成,应该包含哪些内容。计算机的指令格式与机器的字长、存储器的容量及指令的功能都有很大的关系。从便于程序设计、增加基本操作并行性、提高指令功能的角度来看,指令中应包含多种信息。但在有些指令中,由于部分信息可能无用,这将浪费指令所占的存储空间,并增加了访存次数,也许反而会影响速度。为了指出数据的来源、操作结果的去向及所执行的操作,一条指令必须包含操作码和地址码两部分内容,其中操作码规定了操作的类型,地址码规定了要操作的数据所存放的地址,以及操作
16、结果的存放地址,如下所示。6.2.1 指令信息1指令字长度 指令字长度是指一条指令字中包含的二进制代码的位数,它等于操作码长度加上地址码长度。机器字长是指计算机能直接处理的二进制数据的位数,它决定了计算机的运算精度。指令字长度与机器字长没有固定的关系,二者可以相等,也可以不等。通常指令字长度等于机器字长度的指令,称为单字长指令;指令字长度等于半个机器字长度的指令,称为半字长指令;指令字长度等于两个机器字长度的指令,称为双字长指令;指令字长度大于两个机器字长度的指令,称为多字长指令。操作码地址码本讲稿第十六页,共四十八页6.2 指令格式2操作码 操作码具体规定了操作的性质及功能,指定了相应的硬件
17、要完成的操作。指令不同,操作码的编码也不同。操作码要占用一定的指令字长,其位数取决于指令系统的规模。指令操作码的长度确定了指令系统中完成不同操作的指令条数,操作码位数越多,所能表示的操作种类就越多。若某机器的操作码长度为n位,则它最多只能编制2n条不同的指令。指令操作码通常有两种编码格式:固定格式和可变格式。(1)固定格式 操作码的长度是固定的,且集中放在指令字的某一个字段中。这种格式的优点是简化硬件设计,减少指令的译码时间。缺点是操作码的平均长度长,需要指令字长较大。一般在字长较长的大中型机以及超级小型机上使用。(2)可变格式 操作码的长度可变,且分散地放在指令字的不同字段中。这种格式的优点
18、是可压缩操作码的平均长度。缺点是控制器的设计相对较为复杂,指令的译码时间也较长。一般在字长较短的微小型机上广为采用。本讲稿第十七页,共四十八页6.2 指令格式 如某机器的指令长度为16位,以4位为1个字段,分成4个字段,一个4位的操作码字段,3个4位的地址码字段,其指令格式为:其中4位基本操作码可有16种编码,可以表示16条三地址指令。假如,我们用可变格式编码,要表示15条三地址指令,15条二地址指令,15条一地址指令和16条零地址指令,共表示61条指令,则可以进行如下安排:l)三地址指令 15条:其操作码由 4位基本操作码的 00001110给出,剩下的一个编码1111用于把操作码扩展到A1
19、字段。2)二地址指令15条:操作码扩展到A1字段,则操作码有8位,可从1111000011111111,用1111000011111110作为15条二地址指令的操作码,剩下的一个编码11111111用于把操作码扩展到A2字段。3)一地址指令15条:操作码扩展到A2字段,则操作码有12位,可从111111110000 111111111111,用11111110000 111111111110 作为15条一地址指令的操作码,剩下的一个编码111111111111用于把操作码扩展到A3字段。4)零地址指令16条:操作码扩展到整个指令字,则操作码有16位,可从11111111111000011111
20、11111111111。本讲稿第十八页,共四十八页6.2 指令格式3地址码 地址码用来指明指令操作的对象在什么位置,一般可以包含以下内容:(1)操作数地址:明确指出要操作的操作数存放在哪里,以便CPU可以通过这个地址取得操作数。操作数地址可以有两个,即可以有两个操作数,其地址分别用A1和A2来表示。(2)操作结果的存放地址:指明对操作数的处理结果的存储地址,用A3表示。(3)下一条要执行的指令的地址:用A4表示。在一般情况下,程序是顺序执行的,下一条要执行的指令的地址就由程序计数器(Program Counter,PC)给出,当遇到转移指令及调用子程序等程序转移时,下一条要执行的指令的地址应该
21、由指令指明。并不是所有指令都必须包含地址码,如果地址码信息在指令中显式地给出,则称为显地址指令,反之称为隐地址指令。本讲稿第十九页,共四十八页6.2 指令格式指令格式 指令中所包含的地址码信息并不总是相同的,根据地址码所给出的地址的个数,可以把指令格式分成零地址指令、一地址指令、二地址指令、三地址指令和多地址指令。1零地址指令 零地址指令只有操作码而无操作数,通常也叫无操作数指令。其格式为:其中,OPCode表示操作码。只有操作码的指令可能有两种情况:(1)不需要操作数的控制类指令,如空操作指令、停机指令、等待指令等。(2)隐含操作数的指令,如堆栈结构计算机的运算指令,其所需的操作数是隐含在堆
22、栈中的,由堆栈指针SP指出,操作结果仍然放回堆栈中。又如 Intel8086/8088中的字符串处理指令,源操作数和目的操作数分别隐含在源变址寄存器SI和目的变址寄存器DI所指定的存储单元中。OP Code本讲稿第二十页,共四十八页6.2 指令格式2一地址指令一地址指令只包含一个操作数的地址,通常也叫单操作数指令,其指令格式为:其中,OP Code表示操作码,A表示操作数的存储器地址或寄存器名。一地址指令也有两种情况:(1)这个地址既是操作数的地址,又是操作结果的地址。如加1指令、减1指令、移位指令等均可采用这种格式。这类指令的操作原理是对地址码中所指定的操作数进行操作后,把操作结果又送回该地
23、址中。(2)地址码所指定的操作数是源操作数,而目的操作数则隐含在累加器中,操作结果也存回累加器。如以Z-80、Intel8086/8088等微处理器为核心的8位、16位微型计算机的算术逻辑运算指令大都采用这种格式。OP CodeA本讲稿第二十一页,共四十八页6.2 指令格式3二地址指令 二地址指令一般是运算类指令,又称双操作数指令。指令中显式地给出参加运算的两个操作数地址,其格式为:其中,OP Code表示操作码,A1表示源操作数的存储器地址或寄存器名,A2表示目的操作数的存储器地址或寄存器名。这类指令是最常用的指令格式。操作后,其操作结果存放在A2所指定的地址中。OP CodeA1A2本讲稿
24、第二十二页,共四十八页6.2 指令格式4三地址指令 三地址指令中包含三个操作数地址,其中前两个为源操作数地址,第三个为目的操作数地址,其指令格式为:其中,OP Code表示操作码,A1表示第一个操作数的存储器地址或寄存器名,A2表示第二个操作数的存储器地址或寄存器名,A3表示操作结果的存储地址。操作后A1、A2中的操作数均保持原来的数据,操作结果存放在A3所指定的地址中。由于多了一个地址,造成指令码较长,既耗费存储空间,又增加取指令时间,因此这类指令一般应用于运算能力较强、内存空间较大的大、中型机中。OP CodeA1A2A3本讲稿第二十三页,共四十八页6.2 指令格式5多地址指令 这类指令有
25、三个以上操作数地址,指令码长,在某些性能较好的大、中型机以及高档小型机中采用。如字符串处理指令、向量、矩阵运算指令等。应该说明的是,以上所述5种指令格式,并非所有的计算机都具有的,一般来说,零地址指令、一地址指令和二地址指令的指令码较短,具有所需存储空间少,执行速度快,硬件实现简单等优点,为结构简单的微、小型机所采用;在字长较长、功能较强的大、中型机中除采用零地址指令、一地址指令和二地址指令外,也使用三地址指令和多地址指令,如 CDCSTAR100机的矩阵运算指令就有7个地址字段。本讲稿第二十四页,共四十八页6.3 寻址方式 所谓寻址就是寻找操作数或信息的地址,寻址技术就是指令按什么方式寻找到
26、所需的操作数或信息,而寻址方式就是产生访问主存的实际地址的方法。寻址方式与计算机的硬件结构密切相关,从指令的执行角度,可以将寻址方式分为指令的寻址方式和操作数的寻址方式两种。6.3.1 指令的寻址 形成指令地址的方式称为指令的寻址方式。实际上指令的寻址是在程序执行的过程中在主存中找到将要执行的指令地址的过程。指令的寻址方式包括顺序寻址和跳跃寻址两种。1顺序寻址方式 程序中的指令通常是依次存放在主存中,当执行程序时,首先把程序的首地址赋予程序计数器PC,然后根据PC内容从内存中取出指令,当指令稳定到达指令寄存器后,PC内容自动加1(对单字长指令而言),以便指向下一条指令。当第一条指令执行完后,再
27、根据PC的值从内存中取出第二条指令,PC再自动加1,如此反复,直到程序执行完毕,这种方式称为指令的顺序寻址。顺序寻址过程如图6-5所示。本讲稿第二十五页,共四十八页6.3 寻址方式图6-5 顺序寻址过程本讲稿第二十六页,共四十八页6.3 寻址方式2跳转寻址方式 若在内存中取出的指令是转移指令或转子指令,则下一条指令就不能顺序执行了,需要根据本条指令给出的下一条指令地址修改程序计数器PC的内容,以按照转移指令或转子指令中给出的新的指令地址去执行,这种方式称为跳转寻址方式。转移指令或转子指令的执行即赋予PC新指令地址。采用跳转寻址方式,可以实现程序转移或构成循环,从而能缩短程序长度,或将某些程序作
28、为公共程序引用。指令系统中的各种有条件或无条件转移指令,就是为了实现指令的跳转寻址而设置的。跳转寻址过程如图6-6所示。本讲稿第二十七页,共四十八页6.3 寻址方式图6-6 跳转寻址过程本讲稿第二十八页,共四十八页6.3 寻址方式6.3.2 操作数的寻址 寻找操作数有效地址的方法,称为操作数的寻址方式,通常所讲的寻址方式就是指操作数的寻址方式。指令中操作数的地址是由形式地址和寻址方式特征位等组合而成的,因此一般来说指令中所给出的地址并非操作数的有效地址。操作数的有效地址用EA表示,寻址就是把操作数的形式地址转换为有效地址EA。不同的计算机有不同的寻址方式,这里介绍大多数机器都具有的基本寻址方式
29、。1隐含寻址方式 隐含寻址方式是指操作数隐含在CPU的某个通用寄存器或内存的某指定单元中,指令中不直接给出操作数或操作数地址。该方式的优点是可以缩短指令的长度,因此隐含寻址方式是在字长较短的微、小型机上普遍采用的寻址方式。如在Intel80868088中,乘法指令为MUL OPR MUL是操作码,表示乘法;OPR是乘数,而被乘数则隐含在累加器AX(16位乘法)或AL(8位乘法)中。本讲稿第二十九页,共四十八页6.3 寻址方式2立即数寻址方式 操作数由指令的地址码直接给出的寻址方式称为立即数寻址方式。在这种寻址方式中,当取出指令时,操作码和操作数同时被取出,不必再去访问存储器,因此这类寻址方式的
30、指令执行速度较快。但是,由于操作数是指令的一部分,因此操作数不能修改。另外在大多数指令系统中地址码的长度与字长度相比是较短的,所以操作数的大小受地址长度的限制。这种寻址方式适用于操作数固定的情况,通常用于给某一个寄存器或存储器单元赋初值或提供一个常数等。例如,Intel80868088的传送指令:MOV AX,imm 由立即数imm直接给出的操作数传送到累加器AX中。3直接寻址方式 指令的地址码部分给出的不是操作数,而是操作数的存储器地址即有效地址,根据该地址就可以直接读取操作数,这种寻址方式称为直接寻址方式。直接寻址方式的寻址过程如图6-7所示。本讲稿第三十页,共四十八页6.3 寻址方式图6
31、-7 直接寻址过程其中,X为直接寻址方式的代码说明。这种寻址方式的优点是简单、直观,便于硬件实现,指令执行只需要一次存储器的访问时间且不需要任何地址计算,因此速度较快。但是由于操作数的地址是指令的一部分,不能修改,因此只能用于访问固定存储器单元的指令。例如:Intel80868088的传送指令:MOV AX,address 源操作数放在直接地址address所指定的存储器单元中。即有效地址为:EAaddress本讲稿第三十一页,共四十八页6.3 寻址方式4寄存器寻址方式 当操作数不放在内存而是放在CPU的通用寄存器中时,可以采用寄存器寻址方式。应用该种寻址方式指令的地址码部分给出的是存放操作数
32、的某一通用寄存器名称而不是内存的地址单元号。寄存器寻址方式的寻址过程如图6-8所示。其中,X为寄存器寻址方式的代码说明。其有效地址为:EA R 这种寻址方式的地址码较短,而且从寄存器中存取数据比从存储器中存取数据快得多,故这种寻址方式可以缩短指令的长度,节省存储空间,提高指令的执行速度,在现代计算机中得到广泛的应用。但应用这种寻址方式操作数必须事先由主存取出装入寄存器。如果操作数经过一次操作后又送回主存,则由寄存器暂存这些内容实际上是一种浪费。然而如果暂存在寄存器中的操作数能够为多个操作使用,则寄存器寻址方式不失为提高指令执行速度的上佳选择。本讲稿第三十二页,共四十八页6.3 寻址方式5间接寻
33、址方式 指令的地址码部分给出的不是操作数,也不是操作数的地址,而是操作数地址的地址,即指示一个存储器地址,在该地址中存放操作数的地址,这种寻址方式称为间接寻址方式,简称间址。间接寻址方式的寻址过程如图6-9所示。其中,X为间接寻址方式的代码说明。其有效地址为:EA(A0)A1 由于直接寻址的寻址范围有限,间接寻址就成为扩展地址空间的有效方法。在多数计算机中,只允许一次间址,即最多访问存储器两次,一次读操作数的地址,另一次读操作数。有的计算机允许多次间址,如美国DG公司的MV系列计算机。多次间址需要多次访问存储器,这就降低了指令的执行速度。本讲稿第三十三页,共四十八页6.3 寻址方式6寄存器间接
34、寻址方式 指令的地址码部分给出的是寄存器名,寄存器中存放了操作数的地址,这种寻址方称为 寄存器间接寻址方式。寄存器间接寻址方式的寻址过程如图6-10所示。其中,X为寄存器间接寻址方式的代码说明。其有效地址为:EA(R)例如:Intel80868088中的指令:MOV AL,BX 其中的源操作数就是寄存器间接寻址方式。指令执行的结果在AL中存放的不是BX中的内容,而是将BX中的内容作为地址的存储单元的内容。这种寻址方式只需一次访问存储器,可以提高指令的执行速度,在大多数计算机中被广泛采用。本讲稿第三十四页,共四十八页6.3 寻址方式7相对寻址方式 把程序计数器PC的当前内容与指令地址码部分给出的
35、形式地址(经常是偏移量)之和作为操作数有效地址的寻址方式称为相对寻址。程序计数器的内容就是当前指令的地址。这种寻址方式实际上是用程序计数器作为变址寄存器使用的一种特殊的变址寻址方式,因而也称程序计数器寻址。相对寻址过程如图6-11所示。其中,X为相对寻址方式的代码说明,K为指令寄存器内容,即指令地址,A为偏移量。这类寻址方式的寻址过程是,指令地址K与指令地址码部分给出的地址A相加,得到操作数在存储器中的实际地址。其有效地址为:EA(PC)十A 这种寻址方式的特点是,操作数的存储地址是不固定的,它随指令地址(程序计数器值)的变化而改变;程序员无需用指令的绝对地址编程,可以把程序放在内存的任何地方
36、;位移量可正可负,通常用补码表示。本讲稿第三十五页,共四十八页6.3 寻址方式8基址寄存器寻址方式 在这种寻址方式中,把主存的整个存储空间分成若干段,段的首地址存放于基址寄存器中,段内位移量由指令直接给出。操作数在存储器的存储地址就等于基址寄存器RB的内容(即段首地址)与段内位移量A之和。其有效地址为EA(RB)+A 基址寻址技术原先用于大、中型机中,现已被移植到微、小型机上。该种寻址方式必须在CPU中设置基址寄存器。这种寻址方式的优点是可以扩大寻址能力。基址寄存器的位数可以设置得比较长,因此可以在较大的存储空间中寻址。另外,基址寄存器寻址方式比较灵活,通过修改基址寄存器的内容就可以访问存储器
37、的任一单元。本讲稿第三十六页,共四十八页6.3 寻址方式9变址寻址方式 变址寻址方式与基址寻址方式计算有效地址的方法很相似,应用变址寻址方式的指令地址码中给出某个变址寄存器名称,该寄存器存储的内容为某存储器单元地址。所谓变址寄存器是通用寄存器中的某些寄存器。以变址寄存器中的内容为基址,加上指令地址码部分给出的偏移量之和作为操作数的有效地址的寻址方式称为变址寻址方式。变址寻址过程如图 6-12所示。其中,X为变址寻址方式的代码说明,K为变址寄存器内容,A为偏移量。这类指令的寻址过程是,指令地址码部分给出的地址A(通常是偏移量)和指定的变址寄存器R的内容K(通常是首地址)通过地址加法器相加,即得到
38、操作数在存储器中的存储地址。其有效地址为:EA(R)+A这类指令通常用于字符串处理、向量运算等成批数据处理中。例如,Intel80868088中的传送指令:MOV AX,addressBX该条指令中的源操作数的寻址方式为变址方式,源操作数的地址是BX寄存器的内容与address之和。使用变址寻址方式的目的不在于扩大寻址空间,而在于实现程序块的规律性变化。本讲稿第三十七页,共四十八页6.3 寻址方式10块寻址方式 块寻址方式经常用在输入输出指令中,以实现外存储器或外围设备同内存之间的数据块传送。块寻址方式在内存中还可用于数据块搬移。块寻址,通常在指令中指出数据块的起始地址(首地址)和数据块的长度
39、(字数或字节数)。如果数据块是定长的,只需在指令中指出数据块的首地址;如果数据块是变长的,可用三种方法指出它的长度:(1)指令中划出字段指出长度;(2)指令格式中指出数据块的首地址与末地址;(3)由块结束字符指出数据块长度。块寻址的指令格式如下:操作码首地址标志位末地址本讲稿第三十八页,共四十八页6.3 寻址方式11段寻址方式 微型机中采用了段寻址方式,它是为扩大寻址范围而采用的技术。例如在Intel8086/8088系统中,处理器为16位,其地址Reg也是 16位,直接寻址范围只有64KB。然而采用段寻址方式,由段寄存器提供16位段地址,与其他某寄存器提供的 16 位偏移地址共同形成20位物
40、理地址,使得处理器直接寻址可达1MB。在形成20位物理地址时,段寄存器中的16位数会自动左移4位,然后与16位偏移量相加,即可形成所需的内存地址。这种寻址方式的实质还是基址寻址。段寻址的有效地址形成过程如图6-13所示。本讲稿第三十九页,共四十八页6.4 指令的执行6.4.1 指令的执行过程每条指令的执行过程,大致可以分为三步:即取指令、分析指令和执行指令,分别称为取指、分析和执行。1有关指令周期的概念(1)指令周期指令周期是执行一条指令所需要的时间。也就是从取指令开始到执行完这条指令为止的全部时间。一个指令周期由若干个机器周期组成。(2)机器周期机器周期也叫CPU周期。是指CPU访问一次主存
41、或输入输出端口所需要的时间。一个机器周期由若干个时钟周期组成。(3)时钟周期时钟周期是CPU处理操作的最小时间单位,也叫T周期、T状态。(4)取指和取指周期从主存储器中读出指令,称为“取指”,读出一条指令所需的时间称为“取指周期”。同一机器的所有指令的取指周期都相同。一般计算机的取指周期是一个机器周期的时间。(5)执行指令和执行时间取指操作后实现指令功能的全过程称为“执行指令”,执行一条指令所需的时间为“执行时间”。指令不同其执行时间也不同,一般一条指令的执行时间需要若干个机器周期的时间。取指周期和执行时间之和称为指令周期,即从取指开始到指令执行结束所需的总时间。本讲稿第四十页,共四十八页6.
42、4 指令的执行2指令执行过程分析(1)数据传送指令指令形式:MOV R1,R2解释:该指令是把源寄存器的内容传送到目的寄存器之中。操作过程:该指令执行的三个过程取指、分析、执行分别如下。1)取指要执行数据传送指令MOV R1,R2时,程序计数器PC的内容为这条指令在主存中的地址,把该地址值装入地址寄存器MAR,再送地址总线,然后由地址总线寻找该地址所在的主存单元,读出该指令的指令代码,经数据总线输入CPU中的指令寄存器IR。2)分析(指令译码)指令的操作码经指令译码器译码后,识别出这是一条从源寄存器到目的寄存器的寄存器传送指令,R1,R2所对应的地址码经各目的地址译码器译码,分别选中源寄存器R
43、1和目的寄存器R2。在指令译码的同时,程序计数器PC的内容加1,以指向下一条指令,保证程序的顺序执行。3)执行根据指令译码的结果,以及所选中的源寄存器和目的寄存器,控制器发出相应的控制信号,有序地开启三态门,通过数据总线进行数据传送操作。该指令执行完,又按新的PC值进入下一条指令的取指操作。本讲稿第四十一页,共四十八页6.4 指令的执行(2)加法指令指令形式:ADD EA解释:该指令指定一个操作数是累加器AC中的值,EA为存放另一个操作数的主存单元有效地址,指令的功能是把累加器AC和有效地址为EA的主存单元的内容相加,其和送回到累加器AC中。即实现(AC)+(EA)AC。操作过程:该指令执行的
44、三个过程是:1)取指把程序计数器PC的内容(指令地址)装入地址寄存器MAR,送到地址总线,然后由地址总线选中该地址所在的主存单元,取出该指令的指令代码,经数据总线输入CPU中的指令寄存器IR。2)分析(指今译码)指令的操作码经指令译码器译码后,识别出这是一条累加器AC与主存单元相加的加法指令,存放在指令寄存器IR中的数据地址EA输出到地址总线,地址总线根据地址EA在加法指令控制下从主存单元读出相应数据,送上数据总线并装入CPU中的暂存寄存器TR。在指令译码的同时,程序计数器PC的内容加1,产生下一条指令地址。3)执行累加器AC中的数据和暂存寄存器TR中的数据送入算术逻辑运算部件ALU进行加法操
45、作,操作后的两数之和由ALU输出,经数据总线输入累加器AC。该指令操作结束。该指令执行完,又按新的PC值进入下一条指令的指令周期。本讲稿第四十二页,共四十八页6.4 指令的执行(3)转移指令指令形式:JMP EA解释:该指令是无条件转移到以EA为转移地址的转移指令。操作过程:该指令执行的三个过程是:1)取指 把程序计数器PC的内容(指令地址)装入地址寄存器MAR,送到地址总线,然后由地址总线选中该地址所在的主存单元,取出该指令的指令代码,经数据总线输入CPU中的指令寄存器IR。2)分析(指令译码)指令的操作码经指令译码器译码后,识别出这是一条无条件转移指令。在指令译码的同时,程序计数器PC的内
46、容加1,产生下一条指令地址。3)执行 识别出这是一条无条件转移指令后,即把指令中的地址码部分转移地址EA送上数据总线,再装入程序计数器PC,至此,无条件转移指令执行结束。下一条要执行的指令是以EA为地址的主存单元中存放的那条指令。因此,对无条件转移指令来说,在第二步中自动进行的PCl PC实际上是没有意义的。但对于条件转移指令而言,这一步很重要,它要判断条件是否满足,条件满足,操作过程与无条件转移指令类似;若条件不满足,则不实现转移,其下一条指令的执行顺序就由PCl PC来保证。本讲稿第四十三页,共四十八页6.4 指令的执行 从上述三条指令的执行过程可以得出,指令操作可以分解成取指和执行指令两
47、部分,取指操作对不同指令基本是相同的,但指令的执行操作,不同的指令是不同的,尽管不同,仍然可以总结出如下几个步骤:识别指令的功能和类型产生操作数地址取操作数执行功能操作,获得操作结果存储结果 上述几步称为“子操作”,各个子操作之间必须严格遵循一定的时序关系,这个时序是由控制器控制的。本讲稿第四十四页,共四十八页6.4 指令的执行6.4.2 指令的执行方式 指令是由控制器来执行的,由指令组成的程序(机器语言程序或汇编语言程序)在执行前一般都是存放在主存中的,执行时由控制器从程序的入口地址开始,逐条取出指令,分析指令并执行这些指令,周而复始直到程序执行完毕。1顺序执行方式 顺序执行方式是按顺序一条
48、指令接着一条指令的执行方式,如图6-14所示。顺序执行方式的特点是:(1)就整个程序而言,是一条指令接着一条指令顺序地串行执行的。(2)就一条指令而言,其取指、分析、执行三个步骤也是顺序串行进行的。(3)这种执行方式控制简单,硬件容易实现,但执行速度较慢。本讲稿第四十五页,共四十八页6.4 指令的执行2重叠执行方式重叠执行方式是执行多条指令时在时间段上有重叠的指令执行方式,如图6-15所示。重叠执行方式的特点是:(1)就每条指令而言,其内部的取指、分析、执行操作仍为顺序串行执行。(2)从相邻的两条指令来看,它们的某些操作是同时进行的。所谓重叠,就是指两条指令的某些操作同 时进行的意思。在图6-
49、15的例子中,i十1条指令的取指操作与i条指令的分析操作同时进行(操作重 叠),i2条指令的取指操作与il条指令的分析操作及i条指令的执行操作同时进行(操作重叠)。本讲稿第四十六页,共四十八页6.4 指令的执行3流水线方式 流水线方式是把指令的执行过程分解为若干个子过程,分别由不同的硬件去执行的方式。例如,通常把指令的执行过程分为取指、译码、取操作数和执行4个子过程,分别由取指、译码、取操作数和执行4个装置来完成,这种执行方式和工厂里的生产流水线一样,把产品的生产过程分为若干个工序,分别由不同的工种来完成。把指令的执行过程分为上述4个子过程来执行的流水线结构如图6-16所示。流水线的指令执行方
50、式有下列两个特点:(1)就每条指令而言,其各子过程内仍为顺序串行执行,即未改变一条指令的执行时间。(2)每个子过程执行完毕,由于该装置已空闲,即可接收下条指令的该子过程执行。本讲稿第四十七页,共四十八页6.5 小结 本章我们介绍了指令的分类、指令的格式、寻址方式以及指令的执行过程和执行方式。按照指令所完成的功能可将指令分为若干类;为了指出数据的来源、操作结果的去向及所执行的操作,一条指令必须包含操作码和地址码两部分内容,其中操作码规定了操作的类型,地址码规定了要操作的数据所存放的地址以及操作结果的存放地址;为了清楚寻找操作数或信息的地址,本章又介绍了寻址方式,亦即产生访问主存的实际地址的方法,