ARM指令格式:
operation{cond}{s} Rd ,Rn, operand2
操作指令{条件}{状态} 目标寄存器,源寄存器,后续附件的操作
{}:可选项
如:ADD R2,R1,#100; 功能:R2 = R1 + 100
ARM的9种寻址方式
一个简单的汇编程序:
AREA testhello,CODE,READONLY
ENTRY
CODE32
START
ADD R1,R2,#4
MOV R5,R1
END
ARM的六大类指令集---LDR、LDRB、LDRH、LDM、STR、STRB、STRH、STM
内存操作--读取指令 | |||
Opcode | Operands | Description | |
LDR | Rn,Addr | 按照字长(32b)读取到Rn | |
LDRB | 按照字节(8bit)读取到Rn | ||
LDRH | 按照半字(16b)读取到Rn | ||
STR | Rn,Addr | 按照字长(32b)写入Addr | |
STRB | |||
STRH | |||
多寄存器内存访问指令(load/store multi) | |||
LDM(读出内存) | LDM{mode} Rn,{Rs,Re} | 例如:LDMIA R1,{R5,R9} | |
Rn为基址寄存器(n≠15),mode为地址操作模式 | |||
STM(写入内存) | STM{mode} Rn,{Rs,Re} | 例如:STMIB R1,{R5,R9} | |
功能:以R1存储的内容为内存地址(假定为a),将R5内容写入内存(a+4),之后将R9的内容写入(a+8) | |||
地址模式: 数据块模式: IA(Increase after)传输后地址加4,IB(Increase before)传送前加4 DA(Decrease After)传输后减4,DB(Decrease before)传输后加4 堆栈模式: EA(Empty add)空递增堆栈,ED空递减堆栈 FA(Full add) 满递增堆栈,FD满递减堆栈 | |||
数据交换指令(Swap) | |||
SWP | Rd,Rn1,[Rn2] | 内存和寄存器字交换(Rn1将数值赋给[Rn2],同时将Rn2内容作为内存地址的数据传给Rd) | |
SWAPB | 字节交换 |
MOV R1,#0x00110000 ;第二操作数为立即数时,ARM指令中如何判断一个立即数是有效立即数