为了更灵活表达地址,方便程序执行,指令集提供了不同的地址的表示方式,称为寻址方式
名称 | 汇编语法 | 寻址功能 |
---|---|---|
立即 | #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)+的方式来表示自动递增方式。
其中符号的前后顺序较为重要
+号在后表示,在使用这个地址作为有效地址之后再递增,
-号在前表示,在使用这个地址作为有效地址之前就对地址递减。