常用的操作数寻址方式有以下几种。
1.立即寻址方式
若指令中操作数地址字段给出的不是通常的地址,而是可以立即使用的操作数实际值,这种寻址方式称为立即寻址方式,其指令格式如图4-9所示。
图4-9 立即数寻址方式
这种寻址方式的特点是取指令时,操作码和操作数同时被取出,不必再次访问存储器,因此提供操作数最快,也就加快了指令的执行速度。但是,由于操作数是指令的一部分,不能被修改,而且操作数的大小受地址码长度的限制,所以这种寻址方式不灵活。立即提供的操作数称为立即数,它往往是计算过程中要使用的各种常数。
例如:MOV AX,0133H
这条指令的功能是将立即数0133H传到AX寄存器中。
2.直接寻址方式
指令的地址码字段直接指明操作数在存储器内的地址,即形式地址等于有效地址:EA=D,如图4-10所示。
图4-10 直接寻址方式
这种寻址方式简单、直观,便于硬件实现。但是,随着计算机的存储器容量不断增加,所需要的地址码越来越长,势必要增加指令字长。而且,操作数的地址是指令的一部分,不能修改,故这种寻址方式只能用来访问固定的存储器单元。
例如:MOV AX,[1 000H]
这条指令的功能是将存放在有效地址为1000H存储单元的操作数取出,并传到AX寄存器中。
3.间接寻址方式
间接寻址意味着指令中地址码字段所指向的存储单元保存的不是所需要的操作数,而是操作数的地址。即指令中地址码字段给出的不是操作数地址,而是操作数地址的地址,即EA=(D),如图4-11(a)所示。
图4-11 间接寻址方式
间接寻址方式需要多次访问内存,明显地增加了指令的执行时间,同时又要占用主存储器的存储单元,这些都是它的缺点。但是这种寻址方式实现起来简便,给程序编制带来很大的灵活性。
间接寻址方式的指令可以访问大的存储空间,扩大了指令的寻址能力。尽管指令中的形式地址较短,但它所指向的存储单元的内容却可以足够大,即有效地址可以很大,从而保证可以访问全部主存储器。保存并能提供有效地址的主存单元(或寄存器)称为操作数地址指示器或间接地址指示器。
例如:某机器字长16位,指令地址码为10位,若采用直接寻址方式,则寻址空间只有1K单元;而采用间接寻址方式,由于间接地址指示器字长16位,其寻址空间可扩大到64K,用较短的指令地址长度就可以访问较大的存储器空间。
当操作数地址改变时,只需修改间接地址指示器的单元内容,而不必修改指令,原指令的功能照样实现,这给程序编制带来很大方便。
间接寻址可分为一级间接寻址和多级间接寻址。一级间接寻址中,按指令给出的地址码从主存中先取出操作数的有效地址,再根据有效地址取出操作数本身,如图4-11(a)所示。
而多级间接寻址为取得操作数需要多次访问主存,如图4-11(b)所示。
二次间接寻址:EA=((D))
三次间接寻址:EA=(((D)))
4.变址和基址寻址方式
变址寻址方式与基址寻址方式有些类似,它把某个变址寄存器或基址寄存器的内容,加上指令中的形式地址而形成操作数的有效地址,如图4-12和图4-13所示。
图4-12 变址寻址方式
图4-13 基址寻址方式
变址寻址方式:EA=Rx+D
基址寻址方式:EA=Rb+D
这两种寻址方式的优点是:
(1)基址寻址方式可以扩大寻址能力,因为同形式地址相比,基址寄存器的位数可以设置得很长,从而可在较大的存储空间中寻址。
(2)变址寻址可以使有效地址按照变址寄存器的内容有规律地变化,而不改变指令本身。
变址寻址和基址寻址的主要区别是:基址寻址中基址寄存器提供基准值,指令提供位移量;变址寻址中变址寄存器提供位移量,而指令提供基准值。
这两种寻址方式特别适用于向量、矩阵一类的运算,当要求变动操作数地址时,只要修改变址值即可。
5.相对寻址
相对寻址是基址寻址的一种变通,由程序计数器PC提供基准地址,指令中的地址码字段作为位移量D,两者相加后得到操作数的有效地址,即EA=(PC)+D。位移量指出的是操作数与现行指令之间的相对位置。其寻址过程如图4-14所示。
这种寻址方式有两个特点。
(1)操作数的地址不是固定的,它随着PC值的变化而变化,并且与指令地址之间总是相差一个固定值。指令地址变换时,由于其位移量不变,使得操作数与指令在可用的存储区内一起移动,所以仍能保证程序的正确执行。因此采用PC相对寻址方式编写的程序可在主存中任意浮动,它放在主存的任何地方,所执行的效果都是一样的。
图4-14 相对寻址方式
(2)对于指令地址而言,操作数地址可能在指令地址之前或之后,因此,指令中给出的位移量可负、可正,通常用补码表示。如果位移量为n位,则相对寻址的寻址范围为
(PC)-2(n-1)~(PC)+2(n-1)-1
6.寄存器寻址方式
寄存器寻址方式中指令的地址码字段给出某个通用寄存器的编号,这个编号指定的寄存器中存放着操作数。其寻址过程如图4-15所示。(www.xing528.com)
图4-15 寄存器寻址方式
其中IR表示存放指令的寄存器。操作数S与寄存器R,的关系为
S=(Ri)
这种寻址方式具有两个明显的优点。
(1)从寄存器中存取数据比从主存中快得多。
(2)由于寄存器数量较少,其编号字段比存储器单元的地址短得多。因此这种方式可以缩短指令长度,提高指令的执行速度,几乎所有的计算机都使用了寄存器寻址方式。
例如:ADD AX,BX
其含义是将BX寄存器的内容和AX寄存器的内容相加以后,结果送AX寄存器保存。两个操作数都采用寄存器寻址。
采用寄存器寻址时,也可以把操作数的有效地址放在寄存器中,而指令的地址码字段给出寄存器编号,这种方式称为寄存器间接寻址方式,如图4-16所示。
图4-16 寄存器间接寻址方式
例如:ADD AX,[BX]
其含义是以BX寄存器的内容作为源操作数在内存的有效地址,访问内存后得到源操作数,与AX寄存器的内容相加以后,结果送AX寄存器保存。源操作数采用寄存器间接寻址方式,目的操作数采用寄存器寻址方式。
计算机中的寻址方式是灵活多样的,在实际运用中,可以采用基本的寻址方式如以上寻址方式中的全部或部分,也可以组合使用,如变址间址寻址方式、基址加变址寻址方式和相对间接寻址方式等。
例如,变址间址寻址方式的含义就是先将变址寄存器的内容X和形式地址D相加得到D+X,然后再作间接寻址,得到操作数的有效地址。故操作数的有效地址为:EA=(D+X)。
再如,间接变址寻址方式的含义是先将形式地址取间接变换(D)=N,然后把N和变址寄存器的内容X相加,得到操作数的有效地址。故操作数的有效地址为
EA=N+X=(D)+X
Intel 80×86中基址变址寻址方式是一种最基本的寻址方式,基址寄存器可以采用BX或BP,变址寄存器可以用SI或DI,有效地址是把基址寄存器中的值和变址寄存器中的值
相加得到的,即EA=BX+SI。
针对某一具体的计算机,在设计指令系统的寻址方式时可以采用非常灵活的方法。例如,计算机中要采用直接寻址方式,但其访问的内存地址空间受指令地址码字段长度的制约,当内存空间较大时,则可采用分页寻址方式来解决,即将指令中操作数地址码可以访问到的内存地址空间称为一页,则整个内存空间可以按页的大小分为多个页。
例如,设内存储器容量为64K个单元,而指令中地址码长度为9位,则每一页有512个单元,可将内存空间划分为64K/512=128页。为访问128页,需要7位代码来表示页号。
若预先将页号送入页号寄存器,把页号寄存器的内容与指令寄存器中的形式地址两者拼接起来,就能获得一个可以访问整个内存空间的有效地址。这种寻址方式也称为页面寻址。
为了区分出各种不同的寻址方式,需要在指令中给出标识。标识的方式通常有两种:显式和隐式。显式就是在指令中设置专门的寻址方式字段,用二进制编码来表明寻址方式类型,如图4-17(a)所示;隐式是由指令的操作码字段说明指令格式并隐含特定的寻址方式,如图4-17(b)所示。当一条指令有两个或两个以上的操作数时,各个操作数可以采用相同的寻址方式,也可以采用不同的寻址方式。
图4-17 寄存器间接寻址方式
寻址方式的引入带来了以下好处:
(1)丰富了程序设计手段,提高了程序质量;
(2)减少访问主存的次数,压缩程序占用的存储空间,保证指令的地址码字段尽可能的短,而访问的存储空间尽可能的大。
在设计指令系统时,选用寻址方式的依据有:
(1)要与数据的表示方式相配合,对各种结构的数据能方便地进行存取和处理;
(2)要与指令系统相匹配,依据对机器性能要求的高低来考虑选择;
(3)要考虑硬件实现的可能性、复杂程度以及成本的高低等。
例4-2:已知某小型计算机字长为16位,其双操作数指令的格式如图4-18所示。
图4-18 双操作数指令的格式
其中OP为操作码,R为通用寄存器编号,试说明在下列各种情况下能访问的最大内存空间为多少个机器字?有效地址EA如何计算?
(1)A为立即数。
(2)A为直接主存单元地址。
(3)A为间接地址(非多重间接)。
(4)A为变址寻址的形式地址,假定变址寄存器为R1(字长为16位)。
解:从指令格式可看出,双操作数指令的一个操作数在寄存器中(寄存器编号由R字段给出),另一个操作数在存储器中。
(1)立即寻址:取指令时即取到了操作数,因此能访问的存储器空间为计算机所能配置的全部空间。
(2)直接寻址:EA=A。
A字段长度为8位,因此能访问的最大内存空间为28=256个机器字。
(3)间接寻址:EA=(A)。
A字段为形式地址,A单元的内容为操作数地址,由于计算机的字长为16位,A单元的内容是一个16位的二进制数,因此能访问的最大内存空间为216=64K个机器字。
(4)变址寻址:EA=R1+A。
A字段为操作数地址基准值,R1单元的内容为地址的偏移量,由于R1的字长为16位,因此能访问的最大内存空间为216=64K个机器字。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。