![ARM中常用寻址方式 arm的寻址方式](http://img.413yy.cn/images/30101030/30104137t018790dc9ea13a368b.jpg)
先介绍下常用的寻址方式:1.立即寻址:ADD R0 ,R0, #1 ;将R0的内容加1再存到R0中2.寄存器寻址:ADD R0,R1,R2;将R1中的内容加上R2中的内容结果存到R0中3.寄存器间接寻址:ADD RO, R1,[R2];将R2中存的地址所指向的存储器的值与R1相加后存到R0中4.基址变址寻址:LDR R0,[R1,#4];R1的内2容加4的值作为地址的存储器的内容存到R0中LDRR0,[R1,#4]!;R1的内容加4的值作为地址的存储器的内容存到R0中,R1的内容加4存到R1中LDRR0,[R1],#4;R1的内容的值作为地址的存储器内容存到R0中,R1的内容加4存到R1中LDR R0,[R1,R2];R1的内容加R2的内容的值作为地址的存储器的内容存到R0中5.多寄存器寻址:采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这寻址方式可以用一条指令完成传动最多16个通用寄存器的值。以下指令:LDMIA R0,{R1,R2,R3,R4};R1<-[R0];R2<-[R0+4];R3<-[R0+8];R4<-[R0+12]该指令的后缀IA表示在每次执行完加载、存储操作后,R0按字长度增加,因此,指令可将连续存储单元的值传送到R1~R4.6.相对寻址与基址变址寻址方式相类似,相对寻址以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。以下程序段完成子程序的调用和返回,跳转指令BL采用了相对寻址方式BL NEXT;跳转到子程序NEXT处执行......NEXT......MOV PC ,LR;从子程序返回7.堆栈寻址堆栈是一种数据结构,按先进后出的方式工作,使用一个称作堆栈指针的专用寄存器只是当前的操作位置,堆栈指针总是指向堆栈顶。递增堆栈:向高地址方向生长递减堆栈:向低地址方向生长满堆栈:堆栈指针指向最后压入堆栈的有效数据顶空堆栈:堆栈指针指向下一个要放入数据的空位置