您好,欢迎访问三七文档
第三章指令系统指令和指令系统是计算机中最基本的概念。指令是指示计算机执行某些操作的命令,一台计算机的所有指令的集合构成该机的指令系统,也称指令集。指令系统是计算机的主要属性,位于硬件和软件的交界面上。本章将讨论一般计算机的指令系统所涉及的基本问题。3.1.1机器指令的基本格式一条指令就是机器语言的一个语句,它是一组有意义的二进制代码。指令的基本格式如下:操作码:指明操作的性质及功能地址码:指明操作数的地址,特殊情况下也可能直接给出操作数本身。指令的长度是指一条指令中所包含的二进制代码的位数,它取决于操作码字段的长度、操作数地址的个数及长度。指令长度应:(1)尽可能短(2)等于字节的整数倍指令长度可以等于机器字长,也可以大于或小于机器字长。在一个指令系统中,若所有指令的长度都是相等的,称为定长指令字结构;若各种指令的长度随指令功能而异,称为变长指令字结构操作码地址码3.1.2地址码结构一条双操作数指令的除操作码之外,还应包含以下信息:第一操作数地址,用A1表示;第二操作数地址,用A2表示;操作结果存放地址,用A3表示;下条将要执行指令的地址,用A4表示。这些信息可以在指令中明显的给出,称为显地址;也可以依照某种事先的约定,用隐含的方式给出,称为隐地址。下面以双操作数指令为例讨论地址码结构1.四地址指令(A1)OP(A2)→A3A4=下条将要执行指令的地址2.三地址指令(A1)OP(A2)→A3(PC)+1=下条将要执行指令的地址,执行一条三地址指令需4次访问主存。3.二地址指令(A1)OP(A2)A1(PC)+1=下条将要执行指令的地址,A1中原存内容在指令执行后被破坏。4.一地址指令(ACC)OP(A1)ACCA1A2A3A4OP(PC)+1=下条将要执行指令的地址,执行一条一地址指令需2次访问主存5.零地址指令操作数地址是隐含的。参加运算的操作数放在堆栈中,运算结果也放在堆栈中。有关堆栈的概念将在稍后讨论。指令中地址个数的选取要考虑诸多的因素。从缩短程序长度,用户使用方便,增加操作并行度等方面来看,选用三地址指令格式较好;从缩短指令长度,减少访存次数,简化硬件设计等方面来看,一地址指令格式较好。对于同一个问题,用三地址指令编写的程序最短,但指令长度最长,而用二、一、零地址指令来编写程序,程序的长度一个比一个长,但指令的长度一个比一个短。3.1.3指令的操作码指令系统中的每一条指令都有一个唯一确定的操作码,指令不同,其操作码的编码也不同。为了能表示整个指令系统中的全部指令,指令的操作码字段应当具有足够的位数。指令操作码的编码可以分为规整型和非规整型两类:规整型(定长编码)非规整型(变长编码)1.规整型操作码字段的位数和位置是固定的。假定:指令系统共有m条指令,指令中操作码字段的位数为N位,则有如下关系式:N≥log2mIBM370机(字长32位)的指令可分为三种不同的长度形式:半字长指令、单字长指令和一个半字长指令。不论指令的长度为多少位,其中操作码字段一律都是8位,8位操作码字段允许容纳256条指令,实际上在IBM370机中仅有183条指令。定长编码对于简化硬件设计,减少指令译码的时间是非常有利的,但存在着信息冗余。2.非规整型操作码字段的位数不固定,且分散地放在指令字的不同位置上。PDP-11机(字长16位)的指令分为单字长、两字长、三字长三种,操作码字段占4~16位不等,可遍及整个指令长度。操作码字段的位数和位置不固定将增加指令译码和分析的难度,使控制器的设计复杂化。最常用的非规整型编码方式是扩展操作码法:让操作数地址个数多的指令(如三地址指令)的操作码字段短些,操作数地址个数少的指令(如一或零地址指令)的操作码字段长些。例如:设某机的指令长度为16位,操作码字段为4位,有三个4位的地址码字段,其格式为:如果按照定长编码的方法,4位操作码字段最多只能表示16条不同的三地址指令寻址,指的是寻找操作数的地址或下一条将要执行的指令地址。寻址技术包括编址方式和寻址方式。3.2.1编址方式1.编址通常,指令中的地址码字段将指出操作数的来源和去向,而操作数则存放在相应的存储设备中。在计算机中需要编址的设备主要有CPU中的通用寄存器、主存储器和输入输出设备等3种。2.编址单位(1)字编址编址单位=访问单位,每个编址单位所包含的信息量(二进制位数)与读或写一次寄存器、主存所获得的信息量是相同的。早期的大多数机器都采用这种编址方式。(2)字节编址字节编址是为了适应非数值计算的需要。字节编址方式使编址单位与信息的基本单位(一个字节)相一致,这是它的最大优点。然而,如果主存的访问单位也是一个字节的话,那么主存的频带就太窄了。编址单位<访问单位通常主存的访问单位是编址单位的若干倍。(3)位编址也有部分计算机系统采用位编址方式。3.指令中地址码的位数指令格式中每个地址码的位数是与主存容量和最小寻址单位(即编址单位)有关联的。主存容量越大,所需的地址码位数就越长。对于相同容量来说,如果以字节为最小寻址单位,地址码的位数就需要长些;如果以字为最小寻址单位(假定字长为16位或更长),地址码的位数可以减少。设某机主存容量为220个字节,机器字长32位。若最小寻址单位为字节(按字节编址),其地址码应为20位;若最小寻址单位为字(按字编址),其地址码只需18位。3.2.2数据寻址和指令寻址寻址可以分为数据寻址和指令寻址。寻找操作数的地址称为数据寻址,数据寻址方式较多,其最终目的都是寻找所需要的操作数。寻找下一条将要执行的指令地址称为指令寻址,指令寻址比较简单,它又可以细分为顺序寻址和跳跃寻址。顺序寻址可通过程序计数器PC加1,自动形成下一条指令的地址;跳跃寻址则需要通过程序转移类指令实现。跳跃寻址的转移地址形成方式有三种:直接(绝对)、相对和间接寻址,它与下面介绍的数据寻址方式中的直接、相对和间接寻址是相同的,只不过寻找到的不是操作数的有效地址而是转移的有效地址而已。3.2.3基本的数据寻址方式寻址方式是根据指令中给出的地址码字段寻找真实操作数地址的方式。指令中的形式地址A───→有效地址EA1.立即寻址在取指令时,操作码和操作数被同时取出,不必再次访问存储器,从而提高了指令的执行速度。但是,因为操作数是指令的一部分,不能被修改,且立即数的大小将受到指令长度的限制2.寄存器寻址指令中地址码部分给出某一通用寄存器的编号,所指定的寄存器中存放着操作数。两个明显的优点:从寄存器存取数据比主存快得多;由于寄存器的数量较少,其地址码字段比主存单元地址字段短得寻址方式3.直接寻址指令中地址码字段给出的地址A就是操作数的有效地址:EA=A,由于操作数地址是不能修改的,与程序本身所在的位置无关,所以又叫做绝对寻址方式。4.间接寻址指令中给出的地址A不是操作数的地址,而是存放操作数地址的地址。EA=(A)通常在指令格式中划出一位@作为标志位。@=0直接寻址@=1间接寻址间接寻址要比直接寻址灵活得多,它的主要优点为:扩大了寻址范围,可用指令的短地址访问大的主存空间。可将主存单元作为程序的地址指针,用以指示操作数在主存中的位置。当操作数的地址需要改变时,不必修改指令,只需修改存放有效地址的那个主存单元(间接地址单元)的内容就可以了。除去一级间接寻址外,还有多级间接寻址。多级间接寻址为取得操作数需要多次访问主存,即使在找到操作数有效地址后,还需再访问一次主存才可得到真正的操作数。多级间接标志:0:找到有效地址1:继续间接寻址5.寄存器间接寻址指令中的地址码给出某一通用寄存器的编号,被指定的寄存器中存放操作数的有效地址,而操作数则存放在主存单元中。这种寻址方式的指令较短,并且在取指后只需一次访存便可得到操作数。6.变址寻址把指令给出的形式地址A与变址寄存器RX的内容相加,形成操作数有效地址:EA=A+(RX)RX的内容为变址值。变址寻址是一种广泛采用的寻址方式,通常指令中的形式地址作为基准地址,而RX的内容作为修改量。在遇到需要频繁修改地址时,无须修改指令,只要修改变址值就可以了。例如:要把一组连续存放在主存单元中的数据(首地址是A)依次传送到另一存储区(首地址为B)中去,则只需在指令中指明两个存储区的首地址A和B(形式地址),用同一变址寄存器提供修改量K,即可实现(A+K)→B+K。变址寄存器的内容在每次传送之后自动地修改。7.基址寻址将基址寄存器Rb的内容与位移量D相加,形成操作数有效地址:EA=(Rb)+D基址寄存器的内容称为基址值,指令的地址码字段是一个位移量,位移量可正可负。基址寻址和变址寻址在形成有效地址时所用的算法是相同的,而且在一些计算机中,这两种寻址方式都是由同样的硬件来实现的。但这两种寻址方式应用的场合不同,变址寻址是面向用户的,用于访问字符串、向量和数组等成批数据;而基址寻址面向系统,主要用于逻辑地址和物理地址的变换,用以解决程序在主存中的再定位和扩大寻址空间等问题。在某些大型机中,基址寄存器只能由特权指令来管理,用户指令无权操作和修改。8.相对寻址相对寻址是基址寻址的一种变通,由程序计数器PC提供基准地址,即:EA=(PC)+D位移量指出的是操作数和现行指令之间的相对位置。相对寻址方式的特点:操作数的地址不是固定的,它随着PC值的变化而变化,并且与指令地址之间总是相差一个固定值D。当指令地址改变时,由于其位移量不变,使得操作数与指令在可用的存储区内一起移动,所以仍能保证程序的正确执行。采用PC相对寻址方式编写的程序可在主存中任意浮动,它放在主存的任何地方,所执行的效果都是一样的。由于指令中给出的位移量可正、可负,所以对于指令地址而言,操作数地址可能在指令地址之前或之后。9.页面寻址页面寻址相当于将整个主存空间分成若干个大小相同的区,每个区称为一页,每页有若干个主存单元。每页都有自己的编号,称为页面地址;页面内的每个主存单元也有自己的编号,称为页内地址。这样,操作数的有效地址就被分为两部分:前部为页面地址,后部为页内地址。根据页面地址的来源不同,页面寻址又可以分成3种不同的方式:①基页寻址,又称零页寻址。由于页面地址全等于0,所以有效地址EA=0∥A(∥在这里表示简单拼接),操作数S在零页面中,基页寻址实际上就是直接寻址。②当前页寻址。页面地址就等于程序计数器PC的高位部分的内容,所以有效地址EA=(PC)H∥A,操作数S与指令本身处于同一页面中。③页寄存器寻址。页面地址取自页寄存器,与形式地址相拼接形成有效地址有些计算机在指令格式中设置了一个页面标志位(Z/C)。当Z/C=0,表示零页寻址,当Z/C=1,表示当前页寻址。各种数据寻址方式获得数据的速度(由快到慢)立即寻址寄存器寻址直接寻址寄存器间接寻址页面寻址变址寻址(基址寻址、相对寻址)一级间接寻址多级间接寻址为了能区分出各种不同寻址方式,必须在指令中给出标识。标识的方式通常有两种:显式和隐式。显式的方法就是在指令中设置专门的寻址方式(MOD)字段,用二进制代码来表明寻址方式类型。隐式的方式是由指令的操作码字段说明指令格式并隐含约定寻址方式。注意,一条指令若有两个或两个以上的地址码时,各地址码可采用不同的寻址方式。例如,源地址采用一种寻址方式,而目的地址采用另一种寻址方式。MOVAX,(BX)3.3堆栈与堆栈操作堆栈是一种按特定顺序进行存取的存储区,这种特定顺序可归结为“后进先出”(LIFO)或“先进后出”(FILO)3.3.1堆栈结构1.寄存器堆栈用一组专门的寄存器构成寄存器堆栈,又称为硬堆栈。这种堆栈的栈顶是固定的,寄存器组中各寄存器是相互连接的,它们之间具有对应位自动推移的功能,即可将一个寄存器的内容推移到相邻的另一个寄存器中去。2.存储器堆栈从主存中划出一段区域来作堆栈,这种堆栈又称为软堆栈,堆栈的大小可变,栈底固定,栈顶浮动,故需要一个专门的硬件寄存器作为堆栈栈顶指针SP,简称栈指针。栈指针所指定的主存单元,就是堆栈的栈顶。堆栈的栈底地址大于栈顶地址,通常栈指针始终指向栈顶的满单元。进栈时,SP的内容需要先自动减1,然后再将数据压入堆栈(SP)-1→SP修改栈指针(A
本文标题:第三章指令系统
链接地址:https://www.777doc.com/doc-2182110 .html