• 内容讲解

指令中形成操作数或操作数地址的方式称为操作数的寻址方式。一般把指令中直接给出的地址称为形式地址,从形式地址生成有效地址的各种方式称为各种不同的存储器寻址方式,每种寻址方式都有一种对形式地址进行变换处理的运算规则。

常用的操作数寻址方式有以下几种:

1.立即寻址方式

指令的地址码字段指出的不是地址,而是操作数本身,这种寻址方式称为立即寻址方式。立即寻址由于在取出指令的同时也取出了操作数,所以指令的执行速度很快。但由于操作数是指令的一部分,不便于修改,降低了程序的通用性和灵活性。因此,立即寻址方式只适合于操作数固定的场合,通常用于为主存单元和寄存器提供常数。

2.直接寻址方式

直接寻址就是在指令的地址字段中直接指出操作数在主存中的地址,即形式地址等于有效地址,如图4-5所示。这种寻址方式简单、直观,是一种最基本的寻址方式。

416.gif

3.间接寻址方式

与直接寻址方式相比,间接寻址中指令地址码字段所指向的存储单元中存储的不是操作数本身,而是操作数的地址,如图4-7所示。因此,间接寻址方式需要多次访问主存储器,既增加了指令的执行时间,又要占用主存储器单元。但是,这种寻址方式也为编程人员带来了较大的灵活性,实现起来也很简便,而且,间接寻址指令可以访问较大的存储空间,从而扩大指令的寻址能力。由于地址码位数的限制,如果采用直接寻址方式,能够访问的存储空间十分有限,而间接寻址的地址码所指向的存储单元则有足够的位数,因此可以访问全部存储空间。

417.gif

4.寄存器寻址方式

寄存器寻址方式就是指令中的地址码是寄存器的编号,而不是操作数地址或操作数本身。寄存器的寻址方式也可以分为直接寻址和间接寻址,两者的区别在于:前者的指令地址码给出寄存器编号,寄存器的内容就是操作数本身;而后者的指令地址码给出寄存器编号,寄存器的内容是操作数的地址,根据该地址访问主存后才能得到真正的操作数。寄存器寻址方式的优点是用寄存器来暂存操作数或其地址,无需访问主存,速度快。

5.基址寻址方式

基址寻址是将基址寄存器的内容加上指令中的形式地址而形成操作数的有效地址,其优点是可以扩大寻址能力。相对于形式地址,基址寄存器的位数可以设置得很长,从而可以在较大的存储空间中进行寻址。

6.变址寻址方式

变址寻址方式计算有效地址的方法与基址寻址方式很相似,它是将变址寄存器的内容加上指令中的形式地址而形成操作数的有效地址。使用变址寻址方式的目的不在于扩大寻址空间,而在于实现程序块的规律性变化。例如,有一个字符串存储在以AC1H为首址的连续主存单元中,只需要将首地址AC1H作为指令中的形式地址,而在变址寄存器中指出字符的序号,便可访问字符串中的任一字符。

变址寻址和基址寻址方法十分类似,但用途不同。变址寻址主要用于数组的访问,基址寻址则用于扩大寻址范围,从而在较大的存储空间中进行寻址。

7.相对寻址方式

相对寻址,是相对于当前的指令地址而言的寻址方式。相对寻址是把程序计数器PC的内容加上指令中的形式地址而形成操作数的有效地址,而程序计数器的内容就是当前指令的地址,所以相对寻址是相对于当前的指令地址而言的。此时的形式地址通常称为位移量,也就是操作数位置与当前指令位置之间的相对距离,其值可正可负,相对于当前指令地址而浮动。在相对寻址方式中,由于指令的地址和它所涉及的操作数位置相对固定,因此,操作数与指令可以放在主存的任何地方,但仍能保证程序的正确执行。