(5) 相对寻址
相对寻址,是指把在指令字中给出的一个数值(称为相对寻址偏移量)与程序计数器PC的内容相加之和作为操作数的地址或转移指令的地址转移。它与变址寻址的区别是,计算实际地址所用的寄存器已确定为PC,故无须再在指令中指定;而变址寻址中的可用的变址寄存器往往有多个,通常要在指令中指定本次要使用哪一个。相对寻址这一名字的由来,是说计算出的地址与当前指令的地址相对距离多么远是固定的,由相对寻址偏移量决定,而这一相对寻址偏移量可以为正值或负值,可以有不同的取值范围,即可只占一个指令字的一部分(一个字段),其转移指令的转移范围小,或单独占用一个机器字,转移指令可以转移到存储器的任何位置。故相对寻址指令也有单字指令与双字指令之分。
(6) 基地址寻址
基地址寻址,是指把在程序中所用的地址与一个特定的寄存器(称为基地址寄存器)的内容相加之和作为操作数的地址或指令的地址。它与变址寻址、相对寻址形式上有某些类似之处,但其用法却与二者有很大差别,主要用于为多道程序或浮动地址程序定位存储器空间。基地址寄存器中的值是由系统程序用特权指令设定的,用户不能在自己的程序中对其进行修改。
(7) 间接寻址
间接寻址,是指在指令字的地址字段给出的既不是一个操作数的地址,也不是下一条指令的地址,而是一个操作数地址的地址,或一条指令地址的地址。在介绍寄存器寻址时,已经说到寄存器间接寻址,这是间接寻址的一个实例,比较常用。如果是读写存储器操作,则在指令字的地址字段给出的是一个操作数的地址在存储器中的地址,或一条指令的地址在存储器中的地址。此时读写数据需两次访问存储器,速度较慢。若执行多次间接寻址才能得到一条指令或一个数据,系统的运行效率会更低。
(8) 堆栈寻址
堆栈是存储器中一块特定的按"后进先出"原则管理的存储区,该存储区中被读写单元的地址是用一个特定的寄存器给出的,该寄存器被称为堆栈指针(STACK
POINTER,缩写为SP)。如果有些指令,其操作码部分已经指明一个操作数为堆栈中的一个单元的内容,则它已经约定将使用SP访问该单元,故不必在指令的操作数地址字段中另加说明。在采用堆栈结构的计算机系统中,大部分指令表面上都表现为无操作数指令的形式,因为操作数地址都隐含使用了SP。通常情况下,在读写堆栈中的一个单元的前后,都自动完成SP内容的增量或减量操作。
上述8种寻址方式,是计算机中常用的基本寻址方式,可以单独使用,给出一个地址,也可以把它们中的某几种组合在一起,如变址后再间接寻址,变址与基地址寻址的组合,间接寻址还可以连续多次执行等。此外,不是每一台计算机都使用所有的寻址方式,也不一定要把寻址方式设计得很复杂,简单的寻址方式可以使计算机系统有更高的运行效率。
|
|