操作数的寻址方式(一)

2.3.5

操作数的寻址方式

通常,操作数可能在指令中,或存放在主存储器的某地址单元中或在CPU的某寄存器中,还可能存放在堆栈中或1/0接口中。当操作数存放在主存储器的某地址单元中时,若指令中的地址码不能直接用来访问主存,则将这样的地址码称为形式地址。对形式地址进行一定的计算而得到的存放操作数的主存单元地址(即可直接访问主存的地址)称为有效地址或物理地址。需要说明的是,在某些寻址方式中,例如Intel8088/8086,有效地址和物理地址是两个不同的概念。

下面介绍大多数机器常用的基本寻址方式。

1.立即寻址(Immediate Addressing)

在指令中直接给出操作数,即让操作数占据地址码部分,在取出指令的同时也取出了操作数,立即有操作数可用,这种方式称为立即寻址。其指令格式如下:

操作码(OP)

操作数

这种方式不需要再寻找操作数,所以其指令的执行速度很快。但是由于操作数是指令的一部分,不便修改,而在很多场合,指令所处理的数据都是在不断变化的,因此立即寻址只适用于操作数固定的情况,通常用于为主存单元和寄存器提供常数的场合。其优点是立即数的位置随(程序)指令装入存储器的位置变化而变化。在使用时应注意立即数只能作为源操作数。其寻址过程如图2.10所示(假设操作码长度为一个字节,操作数为一个字节,传送到CPU累加器A中)。

2.直接寻址(Direct Addressing)

指令中的地址码给出的就是操作数所在主存单元的物理地址,或称实际地址。在指令执行期间,按该地址访问一次主存便获得操作数,这种寻址方式称为直接寻址。其指令格式如下:

操作码(OP)

地址码

这种寻址方式不需做任何寻址计算,简单并易于硬件实现。但随着主存储器容量不断扩大,所需地址码越来越长,将导致指令的长度增加。此外,地址是指令的一部分,不能修改,因此只能用于访问固定主存单元。其寻址过程如图2.11所示(假设操作码长度为一个字节,地址码为一个字节,内存共256个地址单元,操作数为一个字节,并将其传送到CPU累加器A中)。

3.寄存器寻址(Register Addressing)

一般计算机都设置一定数量的通用寄存器,用以存放操作数、操作数地址及中间运算结果。指令中地址码部分给出某一通用寄存器的地址(即寄存器名),所指定的寄存器中存放着操作数,称为寄存器直接寻址。其寻址过程如图2.12所示。

这种寻址方式具有两个明显的优点:寄存器是CPU中的一部分,在寻址期间不需占用系统总线,因此寄存器存取数据的速度比主存快得多:由于寄存器的数量较少,其地址码也比主存单元地址短得多。因而这种方式可以缩短指令长度,提高指令的执行速度,在现代计算机中得到广泛应用。

4.间接寻址(Indirect Addressing)

指令地址码部分给出的并不是操作数的直接地址,而是存放操作数地址的主存单元地址(简称为操作数地址的地址),这种寻址方式称为间接寻址,简称间址。间接寻址分为1次间址和多次间址两种。在多数计算机中,只允许一次间址,其间址过程如图2.13所示。通常将主存单元称为间址单元或间接指示器。

采用间址方式可将主存单元作为地址指针,用以指示操作数在主存单元的位置。它只要修改指针内容就等于修改了操作数的地址,不需修改指令。因此这种方式较直接寻址方式灵活,便于编程。但间接寻址在取指后至少要访问两次主存才能取出操作数,因此指令执行速度慢。

少数计算机允许多次间址。通常利用间址单元的最高位作为间址标志,若这位为1,则表示需继续间址,直到某单元间址标志为0,表明其内容是操作数的实际地址为止。

5.寄存器间接寻址(Register Indirect Addressing)

为了克服间址中访存次数多的缺点,可采用寄存器间接寻址,即指令中给出寄存器地址,被指定的寄存器中存放操作数的地址。其寻址过程如图2.14所示。

这种寻址方式的指令较短,并且在取指后只需访存一次便可得到操作数,因此指令执行速度较存储器间址方式快。在编程时常使用某些寄存器作为地址指针。如果在程序运行期间修改间址寄存器的内容,则使用这种寻址方式的同一指令可以访问不同的主存单元。

豫ICP备19006514号 网站地图 免责声明:如果侵犯了你的权益,请发邮件至:419017772@qq.com,我们会及时删除侵权内容,谢谢合作!