ARM 指令及汇编程序设计
2
Agenda
寻址模式
指令格式
AAPCS规范
寻址方式
立即寻址
SUBS R0,R0,#1 ;R0 - 1 -> R0
MOV R0,#0xFF00 ;0xFF00 -> R0
寄存器偏移寻址
MOV R0,R2,LSL #3
;R2的值左移3位,结果放入R0,即R0=R2*8
寄存器间接寻址
LDR R1,[R2]
;将R2中的数值作为地址,取出此地址中的数据保存在R1中
基址寻址
Immediate Offset、Register Offset Scaled Register Offset
LDR R2,[R3,#0x0F]
;将R3中的数值加0x0F作为地址,取出此地址的数值保存在R2中
多寄存器寻址
LDMIA R1!,{R2-R7,R12}
;将R1单元中的数据读出到R2-R7,R12,R1自动加1
堆栈寻址
STMFD SP!,{R1-R7,LR}
;将R1-R7,LR入栈。满递减堆栈
块拷贝寻址
STMIB R0!,{R1-R7}
;将R1-R7的数据保存到存储器中,存储器指针在保存第一个值之前增加,增加方向为向上增长
相对寻址
BL ROUTE1 ;调用到ROUTE1子程序
BEQ LOOP ;条件跳转到LOOP标号处
...
LOOP MOV R2,#2
...
ROUTE1
...
第二个操作数
#immed_8r
常数表达式,必须是一个8位常数的偶数次循环移位
合法常量:0x3FC、0、0xF0000000、200、0xF0000001
非法常量:0x1FE、511、0xFFFF、0x1010、0xF0000010
AND R1,R2,#0x0F
;R2与0x0F,结果保存在R1
LDR R0,[R1],#-4
;读取R1地址上的存储器单元内容,且R1=R1-4
Rm
寄存器方式,操作数位寄存器的数值
SUB R1,R1,R2 ;R1-R2->R1
MOV PC,R0 ;PC=R0,程序跳转到制定地址
LDR R0,[R1],-R2
;读取R1地址上的存储器单元内容并存入R0,且R1=R1-R2
Rm,shift
寄存器移位方式,将寄存器的移位结果作为操作数,但Rm值保持不变
3ARM指令及汇编程序设计 (2) 来自淘豆网www.taodocs.com转载请标明出处.