1、第第4 4章章 指令系统指令系统第第4 4章章 指令系统指令系统4.1 概述概述 4.2 指令格式指令格式 4.3 寻址方式寻址方式 4.4 指令类型指令类型 4.5 8086指令系统指令系统 习题习题 第第4 4章章 指令系统指令系统4.1 概概 述述计算机执行某种操作的命令称为指令。通常一条指令对应一种基本操作,例如传送、加、减、移位等等。CPU能直接识别和执行的指令是用二进制代码表示的,这种代码称为机器代码或机器指令。一台计算机中所有机器指令的集合,称为这台计算机的指令系统。指令系统是表征一台计算机性能的重要指标,直接与计算机系统的性能和硬件结构的复杂程度等密切相关,它的格式与功能不仅直
2、接影响到机器的硬件结构,而且也直接影响到系统软件,还影响到机器的适用范围。第第4 4章章 指令系统指令系统4.1.1 指令系统的性能要求指令系统的性能要求早期的计算机,考虑到计算机的硬件结构和成本,指令系统都比较简单,所支持的只有定点加减、逻辑运算、数据传送、转移等十几至几十条指令。由于指令数量少、运算功能弱,只能处理定点数,所以使用不方便。20世纪70、80年代,随着集成电路和超大规模集成电路的飞速发展,计算机硬件成本不断下降,计算机的指令系统变得复杂和完备,指令数多达三五百条,寻址方式也趋于多样化,能处理的数据类型更多,软件变得越来越丰富,计算机中软件成本所占的比例迅速增加。一个完善的指令
3、系统要满足以下四个方面的要求。第第4 4章章 指令系统指令系统1.完备性完备性指令系统的完备性是指常用指令齐全,编程方便,也就是要求指令系统丰富、功能齐全、使用方便。当用汇编语言编写各种程序时,指令系统直接提供的指令足够使用,而不必用软件来实现。2.有效性有效性有效性是指利用该指令系统所编写的程序能够高效率地运行。高效率主要表现在程序占据存储空间小、执行速度快。一般来说,一个功能更强、更完善的指令系统,必定有更好的有效性。第第4 4章章 指令系统指令系统3.规整性规整性指令系统的规整性是指数据和指令使用规则统一简单,易学易记。规整性包括指令系统的对称性、匀齐性、指令格式和数据格式的一致性。对称
4、性指在指令系统中所有的寄存器和存储器单元都可同等对待,所有的指令都可使用各种寻址方式。匀齐性是指一种操作性质的指令可以支持各种数据类型,如算术运算指令可支持字节、字、双字整数的运算,十进制数运算和单、双精度浮点数运算等。指令格式和数据格式的一致性是指指令长度和数据长度有一定的关系,以方便处理和存取,例如指令长度和数据长度通常是字节长度的整数倍。第第4 4章章 指令系统指令系统4.兼容性兼容性兼容性是指同系列机具有相同的基本结构和共同的基本指令集,也就是指令系统是兼容的,这样各机种上软件基本可以通用。但由于不同机种推出的时间不同,在结构和性能上有差异,做到所有软件都完全兼容是不可能的,只能做到“
5、向上兼容”,即低档机上运行的软件可以在高档机上运行。同时要完全满足上述标准是困难的,但它可以指导设计出更加合理的指令系统。设计指令系统的核心问题是选定指令的格式和功能。指令的格式与计算机的字长、期望的存储器容量和读写方式、计算机硬件结构的复杂程度和追求的运算性能等有关。第第4 4章章 指令系统指令系统4.1.2 精简指令系统计算机精简指令系统计算机1.CISC和和RISC在计算机发展初期,由于硬件水平比较低,结构简单,当时计算机的指令系统都比较小,一般只包含一些比较常用的、功能比较单一的机器指令。在这个时期,只要增加计算机硬件的复杂性,就可以使计算机的性能获得很大的提高,而且传统的计算机体系结
6、构设计思想一直认为计算机的指令系统越丰富、越复杂,功能越强,处理程序设计语言的能力也越强,所以为了软件编程方便和提高程序的运行速度,硬件工程师采用的办法是不断增加具有复杂功能的指令和使用多种多样的寻址方式,把计算机指令系统变得越来越复杂、越来越庞大,许多计算机系统都具有300条以上的指令,有的机器甚至多达500条指令,这种计算机称为复杂指令系统计算机(Complex Instruction Set Computer,CISC)。第第4 4章章 指令系统指令系统但是一些计算机工程师们发现,庞大的指令系统并没有给计算机性能带来进一步的提高,反而由于指令系统的过于庞杂,使计算机硬件结构变得复杂、设计
7、周期延长,实现也比较困难,带来了可靠性降低和调试维护工作量增大等一系列问题,而且还可能降低系统性能。20世纪70年代中期,科学家们经研究发现CISC存在许多缺点,主要如下:(1)指令系统使用效率低。经统计,在复杂指令系统的计算机中,20%的计算机指令完成约80%的工作,也就是说,一个典型程序的运算过程所使用的80%的指令,只占一个处理器指令系统的20%。事实上,最频繁使用的指令是取数、存数和加法这些最简单的指令。第第4 4章章 指令系统指令系统(2)体系的复杂性增加了系统的不可靠性。复杂的指令系统必然带来计算机硬件结构的复杂性,这不但增加了设计的时间与成本,还容易造成设计失误。(3)指令操作复
8、杂,影响执行速度。由于大量使用操作复杂的存储器存储器操作指令,计算机的工作效率很难大幅提高。(4)指令系统和寻址方式的复杂化导致体系结构设计困难。在CISC中,许多复杂指令需要极复杂的操作,这类指令多数是某种高级语言的直接翻版,通用性差。所以,复杂指令系统是一种大量指令很少使用的指令系统,它不仅带来计算机结构上的复杂性,同时使微程序设计更为复杂,致使计算机出错的概率增加。第第4 4章章 指令系统指令系统20世纪80年代初,人们发现,提高计算机的性能不是单纯依赖指令系统的复杂程度和完备程度,因此提出了精简指令系统计算机(Reduced Instruction Set Computer,RISC)
9、的概念。RISC结构的最大特点是指令系统简单,其设计原则是使计算机的结构更加简单、更加合理,使系统达到最高的有效速度。精简指令系统计算机是计算机体系结构发展史上又一次重大的变革,是计算机发展的必然趋势。2.RISC技术的特点技术的特点(1)采用高效的流水线操作。采用超标量和超流水线技术,使大部分指令在一个时钟周期内完成。第第4 4章章 指令系统指令系统(2)指令格式的规格化和简单化。选取使用频率较高的一些简单指令,指令条数少,采用硬布线组合逻辑控制,指令长度固定,指令格式种类少。指令采用简单和固定的格式,尽量减少寻址方式,使硬件逻辑部件简化且缩短译码时间,可以提高机器执行效率和可靠性。(3)C
10、PU内设置多个寄存器。这样可以采用大量的寄存器寄存器指令,使指令系统更为精简,控制部件更为简单,指令执行速度大大提高。(4)只有取数/存数指令访问存储器,其余指令的操作都在寄存器之间进行。(5)控制器采用组合逻辑控制,不使用微程序控制。(6)以最简单有效的方式支持高级语言。第第4 4章章 指令系统指令系统4.2 指指 令令 格格 式式机器指令是用机器字来表示的,表示一条指令的机器字就称为指令字。指令格式是指令字用二进制代码表示的结构形式,通常由操作码字段和地址码字段组成。操作码字段表征指令的操作特性与功能,如加运算、减运算或读、写内存等,而地址码字段通常指出参与操作的操作数的地址。一条指令的结
11、构可用如下形式来表示:对于计算机的指令系统,如何合理、科学地设计指令格式,使指令既能给出足够的信息,其长度又能与机器的字长匹配,还能够节省存储空间,缩短取指时间,提高机器的性能,是非常重要的一个问题。第第4 4章章 指令系统指令系统4.2.1 操作码操作码操作码说明指令要执行的具体操作,如传送、运算、移位、跳转等,是指令中必不可少的组成部分。操作码的不同编码可以表示不同的指令,每一种编码代表一种指令。例如,某指令的操作码有3位,可以用操作码000表示数据传送,001表示加法操作,而用010表示减法操作,等等。CPU中设有专门的电路用来解释每个操作码,这样计算机就能执行操作码所表示的操作了。操作
12、码字段位数的选择一般取决于计算机指令系统的规模。较大的指令系统需要较多的位数来表示每条指令。如果一个指令系统需要16条指令,则有4位操作码就够了(24=16),如果需要32条指令,那么就要用5位操作码(25=32)。一般来说,一个包含n位的操作码最多能够表示2n条指令。第第4 4章章 指令系统指令系统指令操作码的长度可以是固定的,也可以是变化的。前者是将操作码集中放在指令字的一个字段内。这种格式便于硬件设计,指令译码时间短,广泛用于字长较长的大中型计算机和超小型计算机以及RISC中。如IBM370和VAX-11系列机,操作码长度均为8位。操作码的长度不固定的指令,一般是指令字较短的指令。为了充
13、分利用指令字长度,指令字的操作码字段和地址码字段是不固定的,将操作码分散在指令字的不同字段中,不同类型的指令有不同的划分,以便用尽可能短的指令字长来表示较多的操作种类,并在越来越大的存储空间中寻址。这种格式可有效地压缩操作码的平均长度,所以在字长较短的微机中被广泛采用。如PDP-11、Intel 8086/80386等,操作码的长度都是可变的。第第4 4章章 指令系统指令系统操作码长度不固定会增加指令译码和分析的难度,使控制器的设计复杂。通常采用扩展操作码技术,使操作码的长度随地址数的减少而增加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。4.2.2
14、操作数地址码操作数地址码操作数地址码说明指令执行过程中需要的操作数,它可以是操作数本身,也可以是操作数的地址或是地址的一部分,还可以是指向操作数的地址指针或其他有关操作数据的信息。地址码的位数决定了指令直接寻址的能力,如果有m位,则指令的直接寻址范围为2m字节。指令需要的操作数越多,地址码的格式也越多,根据指令中地址码的个数,可将指令分为三地址指令、二地址指令、一地址指令和零地址指令。第第4 4章章 指令系统指令系统早期计算机指令的基本格式中,一般有两个源操作数及一个结果操作数,因而就形成了三地址指令格式。在三地址指令格式的基础上,后来又发展成二地址格式、一地址格式和零地址格式。各种不同操作数
15、的指令格式如下所示:第第4 4章章 指令系统指令系统1.三地址指令三地址指令三地址指令字中有三个操作数地址D1、D2和D3,基本操作是:将D1地址中的内容与D2地址中的内容进行操作码规定的操作,结果送到D3的地址中。其表达式为:(D1)OP(D2)D3其中,D1为第一个源操作数的地址;D2为第二个源操作数的地址;D3为结果操作数的地址。2.二地址指令二地址指令二地址指令有两个地址码D1和D2。这种指令格式是最常见的,两个地址均为源操作数地址,将其中一个地址作为存放结果的目的地址(由系统约定)。基本操作是:将D1地址中的内容与D2地址中的内容进行某种操作,结果送到D1或D3中。其表达式为:(D1
16、)OP(D2)D1或D2第第4 4章章 指令系统指令系统3.一地址指令一地址指令一地址指令也称为单操作数指令。有两种情况会使用一地址指令:(1)指令中只有一个地址码,该地址既是源操作数的地址,又是结果操作数的地址。(2)指令中应有两个地址码,其中一个操作数固定存放在累加寄存器AC中。基本操作是:将累加器的数据与指令字中地址码所指定的操作数进行某种操作,操作结果又放回累加寄存器AC中,其表达式为:ACOP(D)AC第第4 4章章 指令系统指令系统4.零地址指令零地址指令零地址指令的指令字中只有操作码,而没有地址码。有两种情况会使用零地址指令:(1)隐含了操作数的单操作数指令,比如,有些操作数默认
17、在堆栈中或在累加寄存器中。(2)控制类指令,不需要操作数。例如,停机指令或空操作指令都是不需要地址码的指令。上述地址D1、D2和D3可以是内存中存储单元的地址,也可以是CPU中的通用寄存器或是直接参与操作的操作数。在二地址指令格式中,会出现三种指令。第一种是存储器存储器型指令。这种指令的两个操作数都放在内存里,从内存单元中取源操作数,操作结果又存到内存中,因此机器执行第第4 4章章 指令系统指令系统这种指令需要多次访问内存,执行速度比较慢。第二种是寄存器寄存器型指令。机器执行这类指令时,源操作数和结果操作数都在CPU的寄存器中,不需要访问内存,所以,计算机执行寄存器寄存器型指令的速度很快。第三
18、种是寄存器存储器型指令。执行此类指令时,一个操作数在内存单元,一个操作数在寄存器,指令的执行速度介于前两者之间。4.2.3 指令字长度指令字长度指令字中包含二进制代码的位数,称为指令字长度。指令字长度取决于操作码的位数、地址码的个数及地址码的位数。由于不同指令的操作码的位数、地址码的个数及地址码的位数不同,所以不同机器的指令字长是不相同的,也不固定,但不可以是任意的。为了便于处理字符数据和充分利用存储空间,指令字长度一般为字节的整数倍。例如,在Pentium系列机中,指令字长度有8位、16位、32位、40位、48位不等。第第4 4章章 指令系统指令系统机器字长是指计算机能直接处理的二进制数据的
19、位数,它决定了计算机的运算精度。指令字长度与机器字长没有固定的关系,可以等于机器字长,称为单字长指令;可以等于半个机器字长,称为半字长指令;也可以等于两个机器字长度,称为双字长指令。例如,IBM370系列,它的指令格式有16位(半字)的,有32位(单字)的,还有48位(一个半字)的。用多字长指令的目的,在于提供足够的地址位来解决访问内存任何单元的寻址问题。早期的计算机,指令字长、机器字长和存储字长均相等,因此访问某个存储单元,便可取出一条完整的指令或一个完整的数据。这种机器的指令字长是固定的,控制方式比较简单。第第4 4章章 指令系统指令系统随着计算机的发展,存储容量的增大,要求处理的数据类型
20、增多,计算机的指令字长也发生了很大的变化。一台机器的指令系统可以采用位数不相同的指令,即指令字长是可变的,如单字长指令、多字长指令。控制这类指令的电路比较复杂,而且多字长指令要多次访问存储器,这就降低了CPU的运算速度,同时又占用了更多的存储空间。为了提高指令的运行速度和节省存储空间,通常尽可能把常用的指令(如数据传送指令、算术逻辑运算指令等)设计成单字长或短字长格式的指令。在一个指令系统中,如果所有的指令字长度是相等的,称为等长指令字结构,它们可以都是单字长指令或半字长指令。这种指令字结构简单,且指令字长度是不变的。如果各种指令字长度随指令功能而异,比如有的指令是单字长指令,有的指令是双字长
21、指令,就称为变长指令字结构。这种指令字结构灵活,能充分利用指令长度,但指令的控制比较复杂。第第4 4章章 指令系统指令系统【例4-1】指令格式如下:解 由指令格式看出操作码字段(OP)为6位,所以该计算机的指令系统最多,有64=26个操作,是二字长二地址的指令。源操作数是寄存器操作数,另一个操作数是由变址寄存器和位移量决定的存储器操作数,整个指令系统属于寄存器存储器型指令。第第4 4章章 指令系统指令系统4.3寻寻 址址 方方 式式 计算机中有些指令不需要操作数,但大多数指令需要一个或两个操作数。一般来说,指令地址码给出的存储器操作数地址并不是操作数的实际地址,称为形式地址,也称偏移量。指令中
22、的地址码字段是由形式地址和寻址方式特征位等组合形成的,而操作数实际的地址称为有效地址(Effective Address,EA)。寻址方式就是根据指令中的形式地址寻找操作数有效地址的方法。计算机中常见的操作数有三类:立即数、寄存器操作数和存储器操作数。直接跟随在指令操作码之后的操作数,称为立即数;存放在CPU内部寄存器中的操作数,称为寄存器操作数第第4 4章章 指令系统指令系统称为存储器操作数。指令的形式地址给出地址信息,在执行时需要根据这个地址信息找到操作数的实际地址。各种计算机中采用的寻址方式累计有几十种,下面主要讨论比较常用的几种寻址方式。4.3.1 立即寻址立即寻址立即寻址就是指令的地
23、址码给出的不是操作数的地址,而是操作数本身,称为立即数。立即寻址方式的优点在于只要取出指令,便可立即获得操作数,这样指令在执行阶段不必再访问存储器,从而节省了访问内存的时间。例如,下面是一条立即寻址的指令格式:这条指令是单地址指令,但这里的D不表示地址,而是一个操作数,F是立即寻址特征位。第第4 4章章 指令系统指令系统4.3.2 寄存器寻址寄存器寻址寄存器寻址就是指令地址码字段指出的是寄存器的编号,如图4-1所示。其操作数在由Ri所指示的寄存器中,操作数的有效地址为寄存器号,即EA=Ri。由于CPU内部的通用寄存器的数量是有限的,因此采用寄存器寻址方式,可使指令中地址码长度明显缩短,而且操作
24、数不在主存中,寄存器寻址在指令执行阶段无须访存,减少了执行时间,执行速度很快。实际上这是一种直接寻址方式,只是直接访问的是通用寄存器而不是主存储器。采用这种寻址方式的优点是可大大缩短指令字的长度和加快指令的执行速度,因此寄存器寻址在计算机中得到广泛应用。第第4 4章章 指令系统指令系统图4-1 寄存器寻址 第第4 4章章 指令系统指令系统4.3.3 直接寻址直接寻址直接寻址就是在指令的地址字段中直接给出操作数在存储器中的地址D,这是一种基本的寻址方法,由于操作数的地址直接给出而不需要经过某种变换,所以称这种寻址方式为直接寻址方式。图4-2是直接寻址方式的示意图。采用直接寻址方式时,指令字中的形
25、式地址D就是操作数的有效地址E,即EA=D。它的优点是寻找操作数比较简单;不需要专门计算操作数的地址,在指令执行阶段对主存只访问一次。它的缺点在于D的位数限制了指令的寻址范围。第第4 4章章 指令系统指令系统图4-2 直接寻址第第4 4章章 指令系统指令系统4.3.4 间接寻址间接寻址间接寻址是相对于直接寻址而言的,间接寻址就是指令地址字段给出的不是操作数的真正地址,而是操作数有效地址所在的存储单元地址,即 D单元的内容才是操作数的有效地址,EA=(D)。图4-3是间接寻址的示意图。间接寻址和直接寻址可以由寻址特征位指出。例如,指令格式如下:若寻址特征位I=0,表示直接寻址,这时有效地址EA=
26、D;若I=1,则表示间接寻址,这时有效地址EA=(D)。第第4 4章章 指令系统指令系统图4-3 间接寻址 第第4 4章章 指令系统指令系统这种寻址方式与直接寻址相比,它扩大了操作数的寻址范围,因为D的位数通常小于指令字长,而存储字长可与指令字长相等。若设指令字长和存储字长均为16位,D为8位,显然直接寻址范围为28,而一次间址的寻址范围可达216。间接寻址方式的缺点是由于指令执行过程中访问存储器两次,故会影响指令的执行速度。4.3.5 寄存器间接寻址寄存器间接寻址寄存器间接寻址就是指令地址码字段指出的寄存器中的内容不是操作数,而是操作数所在存储单元的地址号,即有效地址EA=(Ri)。寄存器间
27、接寻址的工作过程如图4-4所示。第第4 4章章 指令系统指令系统图4-4 寄存器间接寻址 第第4 4章章 指令系统指令系统从图4-4中可以看出,采用这种间接寻址方式的突出优点是指令字长有效缩短,形式地址D的长度取决于CPU内部通用寄存器的数量,而可访问的存储空间取决于寄存器的字长。如果寄存器长16位,那么可访问的最大存储空间为64 KB(216)。这种寻址方式在指令的执行阶段还需访问主存,因有效地址不是存放在存储单元中,而是存放在寄存器里的,故称为寄存器间接寻址,它比间接寻址少访问内存一次。寄存器间接寻址方式与寄存器寻址相比,指令格式中的寄存器内容不是操作数,而是操作数的地址,由该地址指示的操
28、作数在存储器中。第第4 4章章 指令系统指令系统4.3.6 基址寻址基址寻址基址寻址是将指定的基址寄存器(BR)的内容加上指令的地址码而形成操作数的有效地址,如图4-5所示,其操作数的有效地址EA=D+BR。基址寻址方式的优点是可以扩大指令对主存的寻址范围,因基址寄存器的位数可以大于形式地址D的位数。当内存容量较大时,采用直接寻址,会受到D的位数限制,无法对内存所有单元进行访问,但采用基址寻址便可实现全空间寻访。例如,可以将内存空间分为若干段,每段首地址存于基址寄存器中,段内的位移量由指令字中的形式地址D给出,这样操作数的有效地址就等于基址寄存器内容与段内位移量之和,只要对基址寄存器的内容加以
29、修改,便可访问主存的任一单元。第第4 4章章 指令系统指令系统图4-5 变址、基址寻址 第第4 4章章 指令系统指令系统基址寻址在多道程序和浮动程序编制时极为有用。用户在编程时可不用考虑自己的程序存于主存的哪一区域,完全由操作系统或管理程序根据主存的使用状况,将用户程序安置于主存的某一空间,再给基址寄存器赋一个初始值(即基地址),便可将用户程序的逻辑地址转化为主存的物理地址(实际地址)。4.3.7 变址寻址变址寻址变址寻址与基址寻址极为相似,是把指定的变址寄存器(IR)的内容与地址码表示的偏移量D相加来形成操作数有效地址,即EA=D+IR。只要变址寄存器位数足够,可扩大指令的寻址范围,其寻址过
30、程如图4-5所示。第第4 4章章 指令系统指令系统虽然变址寻址与基址寻址的有效地址形成过程极为相似,但两者的应用场合不同,因此从本质来说它们还是有较大的区别。基址寻址主要用于为程序或数据分配存储空间,故基址寄存器的内容通常由操作系统或管理程序确定,而指令字中的偏移量D是可变的;在变址寻址中,变址寄存器的内容是由用户设定的,在程序执行过程中其值可变,而指令字中的偏移量D是不可变的。使用变址寻址的目的不在于扩大寻址空间,而在于实现程序块的规律变化。变址寻址主要用于处理数组问题,在数组处理过程中,可设定D为数组的首地址,通过不断改变变址寄存器的内容,便可很容易形成数组中任一数据的地址,特别适合编制循
31、环程序。第第4 4章章 指令系统指令系统4.3.8 隐含寻址隐含寻址隐含寻址是在指令中没有明显地给出操作数的地址,其操作数的地址隐含在操作码或某个寄存器中。例如,有些两地址的指令,没有在地址字段中指出第二操作数的地址,而是规定累加寄器AC作为第二操作数的地址,指令格式的地址码字段仅有第一操作数的地址D,累加寄存器AC对单地址指令格式来说就是隐含地址。由于隐含寻址在指令字中少了一个地址,因此,这种寻址方式的指令有利于缩短指令字长。第第4 4章章 指令系统指令系统4.3.9 块寻址块寻址块寻址是用于数据块操作的,一般在数据块传送指令中使用,有时也用在输入输出指令中,以实现外存储器或外围设备同内存之
32、间的数据块传送。块寻址通常在指令中指出数据块的起始地址(首地址)和数据块的长度(字数或字节数)。如果数据块是定长的,只需在指令中指出数据块的首地址;如果数据块是变长的,可用三种方法指出它的长度:(1)指令中的某字段给出长度;(2)指令格式中指出数据块的首地址与末地址;(3)由块结束字符指出数据块长度。第第4 4章章 指令系统指令系统4.3.10 相对寻址方式相对寻址方式相对寻址是把程序计数器PC的内容加上指令格式中的形式地址D而形成操作数的有效地址,即EA=PC+D。因为程序计数器的内容是当前指令的地址,而不是普通的操作数,所以“相对”寻址就是相对于当前的指令地址而言,程序的执行方向发生了变化
33、,也就是发生了程序的转移。相对寻址常被用于转移类指令,其最大的特点是转移地址不固定,它可随PC值的变化而变。采用这种寻址方式的好处是程序员无须用指令的绝对地址编程,无论程序在主存的哪段区域,都可正确运行,对于编写浮动程序特别有利。图4-6给出了相对寻址的示意图。由于转移后的目标地址与当前的指令地址有一段距离,所以指令字的形式地址D又称位移量。位移量D可正可负,通常用补码表示。倘若位移量为8位,则指令的寻址范围为PC+127PC-128。第第4 4章章 指令系统指令系统图4-6 相对寻址方式 第第4 4章章 指令系统指令系统4.3.11 扩展变址方式扩展变址方式把变址和间址两种寻址方式结合起来,
34、就可以形成扩展变址方式。按寻址方式操作的先后顺序,有前变址和后变址两种形式。1.先变址后间址先变址后间址先进行变址运算,将其运算结果作为间接地址,间接地址指出的内存单元的内容才是有效地址。所以,有效地址EA=(D+变址寄存器)。2.先间址后变址先间址后变址将指令中的地址码D先进行一次间接寻址,然后再与指定的变址寄存器的内容进行运算,从而得到一个有效地址,所以,有效地址EA=(D)+变址寄存器。第第4 4章章 指令系统指令系统【例4-2】某台计算机字长为16位,主存容量为64 K字,采用单字长单地址指令,共有64条指令。试采用四种寻址方式(直接、间接、变址、相对)设计指令格式。解 64条指令需占
35、用操作码字段(OP)6位,这样指令字余下的长度有10位。为了覆盖主存64 K字的地址空间,设寻址模式(X)为2位,形式地址(D)为8位,其指令格式如下:第第4 4章章 指令系统指令系统寻址模式X定义如下:X=00 直接寻址,有效地址EA=D(256单元)X=01 间接寻址,有效地址EA=D(64 K)X=10 变址寻址,有效地址EA=IR+D(64 K)X=11 相对寻址,有效地址EA=PC+D(64 K)其中,IR为变址寄存器(16位),PC为程序计数器(16位)。在变址和相对寻址时,位移量D可正可负。变址寄存器IR为隐含,可在机器设计时指定某一寄存器作为变址寄存器,使用变址寻址方式前,IR
36、的内容应是变址值。位移量D可用补码数表示,可正可负,根据扩充符号位的规则,变址运算时,由D的最高位扩充高8位成16位的补码数再与IR相加。第第4 4章章 指令系统指令系统4.4 指指 令令 类类 型型 任何计算机的指令系统均由不同类型的机器指令构成,少则几十条,多则几百条,这是由计算机的硬件结构决定的。虽然各类计算机均有自己的指令系统,具体指令的名称和指令的数量可能各不相同,但是基本类型相差不多,按其功能一般可以分成以下几种。1.数据传送类指令数据传送类指令数据传送类指令是计算机最基本的指令,是任何指令系统中都有的,而且是数量最多、使用频度最高的一类指令。这类指令用来完成计算机系统内部各个功能
37、部件之间的数据传送。它一般又可分为:寄存器之间的数据传送、寄存器与存储器之间的数据传送以及堆栈区的访问。第第4 4章章 指令系统指令系统数据传送指令可以实现一个操作数的传送,也可以实现一串操作数的传送;可以是字节传送,也可以是字传送;可以单向传送,也可以双向传送。数据传送类指令的主要特点是只完成数据传送功能,传送时将数据从源地址传送到目的地址,不改变源操作数的内容。2.运算类指令运算类指令1)算术运算指令算术运算指令主要是完成二进制数的加、减、乘、除法运算,以及取补、加1、减1和比较等操作,有的机器还设置有十进制算术运算指令。算术运算指令的主要特点是运算结果会影响标志位。第第4 4章章 指令系
38、统指令系统早期的计算机没有浮点运算指令,浮点运算是通过浮点运算程序或浮点运算协处理器来实现的,现代的计算机都设置有浮点运算指令。2)逻辑运算指令逻辑运算指令主要是完成二进制数的逻辑运算,有“逻辑非”、“逻辑与”、“逻辑或”、“逻辑异或”和单个操作数的逻辑移位操作。逻辑操作可以实现按位求反、屏蔽、置位、测试等功能。逻辑运算指令的主要特点是运算中不需要考虑低位向高位的进位,因此又称对位运算,操作比算术运算简单。第第4 4章章 指令系统指令系统3.程序控制类指令程序控制类指令 程序控制类指令主要用于控制程序的执行方向,计算机工作过程中,一般情况下指令是按顺序执行的,但也会出现分支或转移,这可使程序具
39、有测试、分析和判断的功能。这类指令可分为无条件转移指令、条件转移指令、子程度调用和返回指令、程序中断指令。1)无条件转移指令无条件转移指令可以改变指令的正常执行顺序,不受任何条件限制将程序转移到指令指出的任意地址去执行,这类指令只影响程序计算器PC的内容。第第4 4章章 指令系统指令系统2)条件转移指令条件转移指令主要用于程序的分支转移,执行时,只有满足指令的条件时程序才发生转移,否则顺序执行。条件转移指令中的条件一般用标志寄存器中的状态标志,有进位标志、全零标志、符号标志、溢出标志等。计算机中的这类指令使计算机具有逻辑判断功能。3)子程序调用和返回指令程序设计时,通常会把一组指令序列设置为子
40、程序,子程序可以在主程序中重复使用也可以被其他程序使用,这种结构不但能简化程序设计还能节省存储空间。从主程序转移到子程序称为调用,从子程序转回主程序就是返回。调用与转移不同的是,转移不需要返回,不必保持返回的地址,所以子程序调用指令不但能实现转移,还能保存返回的地址。第第4 4章章 指令系统指令系统返回指令作为子程序的最后一条指令,在主程序结束时,将保存的返回地址送给PC,完成从子程序返回到主程序。4)程序自中断指令一般情况下,中断是由计算机内部突发事件或外部设备的请求而随机产生的,但有时计算机会主动中断现行程序的执行,转去执行某段程序,以实现某种功能,比如程序调试、显示结果等,这时就需要执行
41、程序自中断指令。程序自中断指令后面带有中断号,根据中断号可以找到中断处理程序的入口地址,中断处理完毕后,要回到原程序的中断处继续执行程序。程序自中断指令也称为软中断指令。第第4 4章章 指令系统指令系统4.输入输入/输出指令输出指令输入/输出指令是实现主机与外部设备之间的数据传送,主要用来启动外围设备,检查测试外围设备的工作状态,并实现外部设备和CPU之间,或外围设备与外围设备之间的信息传送。各种不同机器的输入/输出指令差别很大。有的机器指令系统中含有输入/输出指令,而有的机器指令系统中没有设置输入/输出指令。前一种情况中外部设备的寄存器和存储器单元的编址是分开的,需要设输入/输出指令;后一种
42、情况中外部设备的寄存器和存储器单元的编址是统一的,CPU访问外部设备与访问内存是一样的,没有专门的输入/输出指令,而是使用通用的数据传送指令来代替输入/输出指令。第第4 4章章 指令系统指令系统5.其他指令其他指令除以上各类指令外,还可能有状态寄存器置位/复位指令、测试指令、暂停指令、空操作指令,以及其他一些系统控制用的特殊指令。第第4 4章章 指令系统指令系统4.5 8086指令系统指令系统 4.5.1 8086寻址方式寻址方式1.立即寻址立即寻址立即寻址的操作数是立即数,它紧跟在操作码之后,直接由指令给出。汇编格式:n其中:n为立即数,是8位或16位的二进制数。立即寻址示意如图4-7所示。
43、例如:MOV AL,36H ;AL36HMOV BX,2100H;BX2100H第第4 4章章 指令系统指令系统图4-7 立即寻址第第4 4章章 指令系统指令系统2.寄存器寻址寄存器寻址操作数存放在指令中指定的某个寄存器内,所用的寄存器可以是8位的也可以是16位的。汇编格式:REG其中:REG表示寄存器名。寻址示意如图4-8所示。例如:MOV AX,BX ;AXBXMOVAL,CL ;ALCLADD AL,21 ;ALAL+21MOV DATA,DX;DATADX第第4 4章章 指令系统指令系统图4-8 寄存器寻址第第4 4章章 指令系统指令系统3.直接寻址直接寻址直接寻址是指令中直接给出存储
44、器操作数的段内偏移地址。汇编格式:D其中:D是地址表达式。功能:指令中的地址码就是操作数的偏移地址EA。直接寻址示意如图4-9所示。寻址存储器操作数,除了要提供段内偏移地址外,还需要指定相应的段。8086指令系统对存储单元进行访问时,段地址都是从系统事先约定好的段寄存器中获取,若不遵循系统的约定,则要另外指定段寄存器,这就是段超越。表4-1列出了存储器操作数与段地址的约定。第第4 4章章 指令系统指令系统图4-9 直接寻址第第4 4章章 指令系统指令系统表表4-1 CPU对存储器的访问规定对存储器的访问规定第第4 4章章 指令系统指令系统4.寄存器间接寻址寄存器间接寻址寄存器间接寻址的操作数在
45、存储器中,将指令指定的某个寄存器(SI、DI、BX、BP)的内容作为操作数的偏移地址。汇编格式:REG功能:操作数存放在存储器中,寄存器REG存放操作数的偏移地址EA。其中:REG是BX、BP、SI、DI四个寄存器之一。BX、SI、DI间址在数据段中,而BP间址在堆栈段中。偏移地址EA计算方法如下:第第4 4章章 指令系统指令系统BX、SI、DI间址时,操作数的物理地址BP间址时,操作数的物理地址PA=SS*10H+BP例如:MOV AX,BX ;PA=DS*10H+BXMOV BP,AL ;PA=SS*10H+BPMOV DS:BP,AX;段超越,PA=DS*10H+BP第第4 4章章 指令
46、系统指令系统【例4-3】MOV AX,BX若DS=3000H,BX=2400H,AX=5427H,则指令执行后AX的内容是什么?解 EA=BX=2400H,物理地址=30000H+2400H=32400H。指令执行前:AX=5427H,32400H=39H,32401H=0BCH;指令执行后:AX=0BC39H,2400H=39H,2401H=BCH。指令执行情况如图4-10所示。第第4 4章章 指令系统指令系统图4-10 寄存器间接寻址 第第4 4章章 指令系统指令系统5寄存器相对寻址寄存器相对寻址寄存器相对寻址的操作数在存储器中,是将指令中指定的某寄存器内容与指令提供的8位或16位的相对偏
47、移量相加,两者之和是操作数的有效地址。BX、SI、DI寄存器指示的是数据段中的数据,而用BP指示的是堆栈段中的数据。汇编格式:DREG或REG+D。其中:REG是BX、BP、SI、DI四个寄存器之一,D是位移量,是8位或16位二进制补码表示的带符号数。使用BX、SI、DI作地址的操作数在数据段中,而使用BP作地址的操作数在堆栈段中。功能:操作数存放在存储器中,寄存器REG的内容加位移量D为操作数的偏移地址EA。第第4 4章章 指令系统指令系统偏移地址EA计算方法如下:例如:MOV BP-6H,AL ;PA=SS*10H+BP-6HADD BYTE PTRBX+10H,5;PA=DS*10H+B
48、X+10HMOV BX,DATASI ;PA=DS*10H+SI+DATAMOV DS:DATABP,0 ;PA=DS*10H+BP+DATA第第4 4章章 指令系统指令系统【例4-4】若指令执行前,DS=2000H,SI=0040H,20042H=38H,20043H=91H,则执行下列指令后,源和目的操作数各为多少?MOV DX,SI+2解 源操作数是存储器操作数,寻址方式为寄存器相对寻址,所以EA=SI+2=0042H物理地址=DS*10H+EA=20042H指令执行后,DX=9138H,20042H=38H,20043H=91H。指令执行过程见图4-11。第第4 4章章 指令系统指令系
49、统图4-11 寄存器相对寻址 第第4 4章章 指令系统指令系统6.基址变址寻址基址变址寻址 基址变址寻址的操作数在存储器中,将指令指定的基址寄存器(BR)内容与变址寄存器(IR)内容相加,两者之和是操作数的有效地址。汇编格式:BR+IR或BRIR其中:BR为BX或BP;IR为SI或DI。功能:操作数存放于存储器,BR的内容加IR的内容是操作数的偏移地址EA。基址寄存器为BX或BP,变址寄存器为SI或DI,但指令中不能同时出现两个基址寄存器或两个变址寄存器。如果基址寄存器为BX,则段寄存器使用DS;如果基址寄存器用BP,则段寄存器用SS。第第4 4章章 指令系统指令系统操作数偏移地址EA计算方法
50、如下:基址寄存器为BX时,操作数的物理地址 基址寄存器为BP时,操作数的物理地址第第4 4章章 指令系统指令系统例如:MOV AX,DS:BPSIMOV AL,BX+SIMOV BX+DI,DXADD BP+SI,AL【例4-5】若指令执行前,DS=2000H,BX=0100H,SI=0040H,20140H=12H,则执行下列指令后,源和目的操作数各为多少?MOV AL,BX+SI(或 MOV AL,BXSI)解 源操作数是存储器操作数,寻址方式为基址变址寻址,所以EA=BX+SI=0140H物理地址=DS*10H+EA=20140H指令执行后,AL=12H,20140H=12H。指令执行过