ARM汇编程序设计——第一章 ARM指令集

1)指令格式
①一般格式
<指令操作码>{条件域}{执行时是否更新CPSR} <目的寄存器>,<第一个源操作数>,{第二个源操作数}
其中<>内为不可省略,{}内为可省略。
②指令中的条件域
每条ARM指令包含4位的条件码,位于指令的最高四位,条件码共有16种,只有15种可用,第16种为系统保留。
ARM汇编程序设计——第一章 ARM指令集_第1张图片
2)指令中的操作数符号
①#——立即数符号
②!——更新基址寄存器符号
③^——复制SPSR到CPSR符号
④- ——指示寄存器列表范围符号
3)指令中的移位操作符
格式如下:
通用寄存器,<移位操作符>#<移位次数>
ARM汇编程序设计——第一章 ARM指令集_第2张图片
4)指令的寻址方式
①立即寻址
MOV R0,#0x00
②寄存器寻址
ADD R0,R1,R2
③寄存器间接寻址
LDR R5,[R4]
④基址加变址寻址
LDR R0,[R1,#4]
⑤相对寻址
⑥堆栈寻址
⑦块拷贝寻址
可以用一条指令完成最多传送16个通用寄存器的值
LDMIA R0,{R1-R3}
5)指令分类
①数据处理类指令

ARM汇编程序设计——第一章 ARM指令集_第3张图片
②程序状态寄存器访问指令
1)MRS——程序状态寄存器到通用寄存器的数据传送
MRS cond Rd,PSR(CPSRorSPSR)
2) MSR——通用寄存器到程序状态寄存器
MSR cond PSR_fields,Rm
③跳转指令
在ARM中有两种跳转方式:一是使用跳转指令,可以实现从当前指令向前向后32MB空间跳转,二是直接向PC中写入地址值,可以实现在4GB的空间内进行跳转
1)B ——转移指令
B cond Lable(目的地址)
跳转值是一个想对值,如果使用B .指令.代表当前地址。
2)BX——带状态切换的跳转指令
BX cond Rn
跳转到由Rnyu0xfffffffe相与后的地址,如果Rn的最低位=1,则将CPSR的T标志置1,且将目标地址的代码解释为Thumb。
3)BL——带返回的转移指令
BL cond Label
在跳转前会在R14内保存PC的当前值。
4) BLX——带返回且带状态切换的转移指令
BLX Label
上述结合
④加载/存储指令
1)LDR——字数据加载
LDR cond Rd,[Rn,#offset][!]
2)LDRB——字节数据加载
LDR cond B Rd,[Rn,#offset][!]
3)LDRH——半字数据加载指令
LDR cond H Rd,[Rn,#offset][!]
4)STR——字数据存储
STR cond Rd,[Rn,#offset][!]
5)STRB——字节数据存储
STR cond B Rd,[Rn,#offset][!]
6)STRH——半字数据存储
STR cond H Rd,[Rn,#offset][!]
7)LDM——批量数据加载
LDM cond {IA|IB|DA|DB}Rn[!],reglist[^]
IA:传送后地址增加
IB:传送前地址增加
DA:传送后地址减少
DB:传送前地址减少
!:当数据传送完之后将最后的地址写入基址寄存器
基址寄存器不允许使R15
^:当指令位LDM且寄存器列表中包含R15,除了正常的数据传送外,还将SPSR复制到CPSR,同时还表示传入或传出的是用户模式下的寄存器,而不是当前模式下的寄存器。
8)STM——批量数据存储
STM cond {IA|IB|DA|DB}Rn[!],reglist[^]
⑤协处理器指令
⑥异常中断指令
1)SWI——软件中断指令
SWI cond imm24
2) BKPT——断点中断指令
BKPT imm16

你可能感兴趣的:(汇编语言)