为了更灵活表达地址,方便程序执行,指令集提供了不同的地址的表示方式,称为寻址方式

名称 汇编语法 寻址功能
立即 #Value 操作数=Value
寄存器 R_i EA=R_i
绝对 LOC EA=LOC
间接 (R_i) EA= [R_i]
变址 X(R_i) EA= [R_i]+X
带变址基址 (R_i,R_j) EA = [R_i]+[R_j]
带变址与偏移量的基址 X(R_i,R_j) EA = [R_i]+[R_j]+X
相对 X(PC) EA = [PC]+X
自动递增 (R_i)+ EA = [R_i]递增地址
自动递减 -(R_i) EA = [R_i]递减地址

在前面指令的讨论中,仅使用了寄存器和绝对寻址方式。

使用实例

  • 立即

Move #200,R0,将数值200复制到寄存器R0中

  • 间接

对于寄存器R1,其存储的内容为存储单元B对应的地址
(R1)表示从R1中取出的值作为地址,去寻找该地址存储的实际值。
(R1)存储着存储单元B的地址
Add (R1), A ,表示将B中的值加到A中。

  • 变址

在间接的基础添加一个偏移量。如Add 24(A),R0,表示将存储单元A地址+24后得到的地址对应的存储单元加到R0上。典型例子如数组。

  • 带变址基址

在变址的基础上,偏移量可变。如Add (R1,R2),R0,那么对于R2可以存储值24,效果与变址相同,但是在后续的执行中,该R2可以改变值,要比单变址更为灵活

  • 带变址与偏移量的基址

在带变址基址的基础上,额外再增加一个偏移常量,这对于高维数组的访问提供了一定的灵活性

  • 相对

相对寻址与间接类似,只是程序计数器PC是特殊的,表示相对于程序计数器的地址。这种方式往往可以用来确定跳转指令的目的地址。

  • 附加方式

默认情况下递增值为1
但实际递增值较为复杂,递增递减的值与存储器有关,也与要访问的内容有关,若访问连续字节,递增值为1,若访问连续的32位字长的字递增值为4。若访问连续占8位的操作数,递增值为1,而这些信息往往会在指令中的某一部分被说明,因此使用(R_i)+的方式来表示自动递增方式。
其中符号的前后顺序较为重要
+号在后表示,在使用这个地址作为有效地址之后再递增,
-号在前表示,在使用这个地址作为有效地址之前就对地址递减。