两者都有一个写明在指令里的形式地址A(比如一个16位数),与一个指明寄存器编号的字段R(比如一个2位的编号来区分4个寄存器,这个寄存器可以是隐式的)
区别在于,如果寄存器存的是一个基地址,那就是基址寻址;如果寄存器存的是偏移量,就是变址寻址
变址寻址的使用:A等于数组的开始地址,寄存器里存放偏移量,每次要访问下一个数的时候给寄存器+1(+4/+8都行)。也就是这里由用户来动寄存器,修改里面的偏移量,从而在运行中动态的访问一段地址空间
(以上的内容比较确定,下面的纯属自己的理解)
基址寻址不是很确定,我理解类似相对寻址——汇编的时候地址都是逻辑地址,然后基址寄存器里由操作系统分配一个基地址,作为这段程序运行的地方。然后里面写的逻辑地址就是基址寻址来使用:系统分配的基址寄存器,加上汇编出来的偏移量A,作为一个实际的有效地址。
这个过程中用户是没有去动态的修改任何一个东西的:基址由操作系统给,全程都不变;偏移量是编译源代码的时候给出的,运行中不会改变。这就不同于变址的:基址由程序编译时给出,也是写死的,但是偏移量是在运行中动态的计算得出,由用户自己控制