什么叫计算机寻址?计算机寻址方式概述
什么叫计算机寻址?计算机寻址方式概述在指令字中给出的既不是一个操作数的地址,而是一个操作数地址的地址,或一条指令地址的地址。采用间接寻址读写数据需两次访问存储器,速度较慢,如图是指把在程序中所用的地址与一个特定的寄存器(称为基地址寄存器)的内容相加之和作为操作数的地址或指令的地址。它与变址寻址、相对寻址形式上有某些类似之处,但其用法却与二者有很大差别,主要用于为多道程序或浮动地址程序定位存储器空间。寄存器间接寻址,在寄存器中给出的不是操作数,而是操作数在存储器中的地址,这被称为寄存器间接寻址,这也是最常用的寻址方式之一,如图是把在指令字中给出的一个数值(称为变址偏移量)与一个被称为变址寄存器的内容相加之和作为操作数的地址,用于读写存储器,如图4.5所示。它特别适合于处理数组型数据;有些计算机,更设置了自动对变址寄存器内容增1和减1的操作功能。与立即数寻址方式类似,依据变址偏移量的范围大小,变址指令可能为单字或双字两种情况。是
立即数寻址操作数直接给出在指令字中,即指令字中直接给出不再是操作数地址,而是操作数本身。它的主要用法是把一个确定的数值传送到一个通用的寄存器中,或直接用于运算。当该数据占用的位数较少时(如小的整数、一个西文字符),可把该数值安排在第一个指令字中,则在读出指令的同时也得到相关数据;否则只能将其存放在指令的第二个字中,这就构成了双字指令,如图
直接寻址直接寻址是在指令中直接给出操作数在存储器中的地址,这是计算机中常用的寻址方式之一。与立即数寻址方式类似,当该地址占用的位数较少时,可将其安排在第一个指令字中,则在读出指令的同时也得到相关地址,否则只能用双字指令实现
寄存器寻址是在指令字中给出通用寄存器的编号(名字、地址),用于访问运算器部件的寄存器组中的寄存器,由于表示一个通用寄存器编号占用的位数少,有利于缩短指令字的长度;用寄存器暂存数据并用于完成运算速度更快,故这是最基本最常用的寻址方式。
查看动画演示(寄存器寻址)
寄存器间接寻址,在寄存器中给出的不是操作数,而是操作数在存储器中的地址,这被称为寄存器间接寻址,这也是最常用的寻址方式之一,如图
变址寻址是把在指令字中给出的一个数值(称为变址偏移量)与一个被称为变址寄存器的内容相加之和作为操作数的地址,用于读写存储器,如图4.5所示。它特别适合于处理数组型数据;有些计算机,更设置了自动对变址寄存器内容增1和减1的操作功能。与立即数寻址方式类似,依据变址偏移量的范围大小,变址指令可能为单字或双字两种情况。
相对寻址是指把在指令字中给出的一个数值(称为相对寻址偏移量)与程序计数器PC的内容相加之和作为操作数的地址或转移指令的地址转移,如图4.6所示。相对寻址偏移量决定目标地址与当前指令的地址距离是多少,相对寻址偏移量可以为正值或负值,可以有不同的取值范围,可能只占一个指令字的一部分(一个字段),其转移的地址范围小,或单独占用一个计算机字,则可以转移到存储器的任何位置,故相对寻址指令也有单字指令与双字指令之分。
基地址寻址是指把在程序中所用的地址与一个特定的寄存器(称为基地址寄存器)的内容相加之和作为操作数的地址或指令的地址。它与变址寻址、相对寻址形式上有某些类似之处,但其用法却与二者有很大差别,主要用于为多道程序或浮动地址程序定位存储器空间。
间接寻址在指令字中给出的既不是一个操作数的地址,而是一个操作数地址的地址,或一条指令地址的地址。采用间接寻址读写数据需两次访问存储器,速度较慢,如图
堆栈寻址堆栈是存储器中(或专用寄存器组)一块特定的按“后进先出”原则管理的存储区,该存储区中被读写单元的地址是用一个特定的寄存器给出的,该寄存器被称为堆栈指针(STACK POINTER,缩写为SP)。如果有些指令,其操作码部分已经指明一个操作数为堆栈中的一个单元(通常为栈顶)的内容,则它就已经约定将使用SP访问该单元,故不必在指令的地址字段中另加指定。通常情况下,在读写堆栈中的一个单元的前后,都伴有自动完成对SP内容的增量或减量操作。