ARM寻址方式
- 立即寻址 ADD R0, R0, #1 ;R0,<-R0+1
- 寄存器寻址 ADD R0, R1, R2 ;R0<-R1+R2
- 寄存器间接寻址 ADD R0,, R1,[R2] ;R0<-R1+[R2]
- 寄存器偏移寻址 MOV R1, R2,, LSL #3 ;R1<-R2*8
MOV R3, #3
ANDS R1,, R1,, R2,,LSL R3 ;R1<-R1&(R2*8)
LSL:逻辑左移,空出的最低位由0填充
LSR:逻辑右移,空出的最高位由0填充
ASL:算数左移,空出的最低位由0填充
RSL:算数右移,正数空出的最高位由0填补,负数的最高位由1填补
ROR:循环右移,移出的最低位填入最高位
- 基址变址寻址: LDR R0,, [R1,#4] ;R0<-[R1+4]
LDR R0,, [R1], #4 ;R0<-[R1], R1<-R1+4
- 多寄存器寻址:LDMIA R0,, {R1, R2,, R3,,R4} ;R1<-[R0],R2<-[R0+4],R3<-[R0+8],R4<-[R0+12]
STMIIA R0,, {R3-R5, R10}
;R0<-R3, [R0+4]<-R4, [R0+8]<-R5, [R0+12]<-R10
- 堆栈寻址: STMFD SP!, {R1-R7, LR} ;将寄存器R1-R7,LR中的值入栈,满递减堆栈
LDMFD SP!, {R1-R7, LR} 将数据出栈到寄存器R1-R7,LR中,满递减堆栈
ARM汇编指令
- 跳转指令:B waita ;无条件跳转到坐标号waita
B ox1234;无条件跳转到绝对地址0X1234处
BL WAITA ; 无条件跳转到标号WAITA处执行时,同时将当前的PC值保存到R14(LR)
S3c2410 ARM寄存器
R0——R15:普通寄存器
R0——R12:不涉及ATPCS规则
R8——R14:具有快速中断
R13有名SP:栈指针寄存器,存放堆栈的顶地址
R14又名LR:程序计数器,PC值始终未下一条即将执行的指令地址。
CPSR内容:
(1)条件代码标志位
①N:对有符号二进制补码,结果为负N=1,为正或0,N=0
②Z:比较结果为0,Z=1,否则Z=0
③C:加法时最高位产生进位,C=1,否则C=0
减法时最高位产生借位,C=0,否则C=1
④V:加减法运算,发生有符号溢出时V=1,否则V=0
(2)控制位:控制CPU是否响应中断
①Ⅰ:中断禁止位
② F :快中断禁止位
③ T :T置位,处理器在Thumb状态,T清零,处理器在ARMZ状态
(3)模式位:由M4、M3、M2、M1、M0决定
七中模式:用户、系统、管理、中断、快中断、中止、未定义
指令执行时:PC值=当前正在执行的指令在内存中的地址+8;