所谓寻址方法便是处理器依据指令中给出的地址信息来寻觅物理地址的方法。
当即(数)寻址
操作数自身就在指令中给出,只需取出指令也就取到了操作数。这个操作数被称为当即数,对应的寻址方法为当即寻址
ADD R0,R0,#1 ;R0<-R0+1
ADD R0,R0,#ox3f ;R0<-R0+0x3f
以上指令中,第二个源操作数即为当即数。当即数以#最初
寄存器寻址
使用寄存器中的数值作为操作数,这种寻址方法是各类微处理器常常选用的一种方法,也是一种碑文功率较高的寻址方法。
ADD R0,R1,R2 :R0<-R1+R2
该指令将寄存器R1和R2的内容相加放到R0中。
寄存器直接寻址
以寄存器中的值作为操作数的地址,而操作数自身存放在存储器中
ADD R0,R1,[R2] ;R0<-R1+[R2]
LDR R0,[R1] ;R0<-[R1]
[]一共取寄存器内容处的存储器的值
基址变址寻址方法
将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,然后得到一个操作数的有用地址:
LDR R0,[R1,#4] ;R0<- [R1+4]
LDR R0,[R1,#4]! ;R0<- [R1+4], R1<- R1+4
LDR R0,[R1],#4 ;R0<- [R1], R1<- R1+4
LDR R0,[R1,R2] ;R0<-[R1+R2]
多寄存器寻址
一条指令能够完结多个寄存器值的传送。一条指令完结传送最多16个通用寄存器的值
LDMIA R0,{R1,R2,R3,R4} ;R1<- [R0] R2<-[R0+4] R3<-[R0+8] R4<-[R0+12]
IA一共每次碑文完加载操作后,R0按字长度添加
相对寻址
以程序计数器PC的当时值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有用地址。
以下程序段完结子程序的调用和回来,跳转指令BL选用了相对寻址方法:
BL NEXT ;跳转到子程序NEXT处碑文
·····················
NEXT
··························
MOV PC,LR ;从子程序回来
椎栈寻址
椎栈指针总是指向栈顶
递加椎栈:向高地址方向成长
递减椎栈:向低地址方向成长
满椎栈:椎栈指针指向最终压入椎栈的有用数据项
空椎栈:椎栈指针指向下一个要放入数据的空方位