arm汇编编程(示例)
器。Rm:变址寄存器。Index:偏移量,12位的无符号数。
STRRd,[Rn];将寄存器Rd中的字数据写入到内存中地址为Rn内存中
STRRd,[Rn,Rm];将寄存器Rd中的字数据写入到内存中地址为Rn+Rm的内存中
STRRd,[Rn,#index];将寄存器Rd中的字数据写入到内存中地址为Rn+index内存中
STRRd,[Rn,Rm,LSL#5];将寄存器Rd中的字数据写入到内存中地址为Rn+Rm×32内存中
STRRd,[Rn,Rm]!;将寄存器Rd中的字数据写入到内存中地址为Rn+Rm的内存中
STRRd,[Rn,#index]!;将寄存器Rd中的字数据写入到内存中地址为Rn+index的内存中,并将新地址Rn+index写入Rn
STRRd,[Rn,Rm,LSL#5]!;将寄存器Rd中的字数据写入到内存中地址为Rn+Rm×32的内存中,并将新地址Rn+Rm×32写入Rn
STRRd,[Rn],Rm;将寄存器Rd中的字数据写入到内存中地址为Rn的内存中,并将新地址Rn+Rm写入Rn
STRRd,[Rn],#index;将寄存器Rd中的字数据写入到内存中地址为Rn的内存中,并将新地址Rn+index写入Rn
STRRd,[Rn],Rm,LSL#5;将寄存器Rd中的字数据写入到内存中地址为Rn的内存中,并将新地址Rn+Rm×32写入Rn
(1)STR字数据存储指令
把寄存器Rd中的字数据(32位)保存到addr所表示的内存地址中,同时还可以把合成的有效地址写回到基址寄存器。
例:STRR0,[R1,#5]!;把R0中的字数据保存到以R1+5为地址的内存中,然后R1=R1+5
(2)STRB字节数据存储指令
把寄存器Rd中的低8位字节数据保存到addr所表示的内存地址中。
例:STRBR0,[R1];将寄存器R0中的低8位数据存入R1表示的内存地址中
(3)STRBT用户模式的字节数据存储指令
同STRB指令,但无论处理器处于何种模式,该指令都将被当作一般用户模式下的内存操作。
(4)STRH半字数据存储指令
把寄存器Rd中的低16位半字数据保存到addr所表示的内存地址中,而且addr所表示的地址必须是半字对齐的。
例:STRHR0,[R1];将寄存器R0中的低16位数据存入R1表示的内存地址中
(5)STRT用户模式的字数据存储指令
同STR指令,但无论处理器处于何种模式,该指令都将被当作一般用户模式下的内存操作。
2.多数据访存指令
1)批量数据加载指令
格式:LDM{
功能:从一片连续的内存单元读取数据到各个寄存器中,内存单元的起始地址为基址寄存器Rn的值,各个寄存器由寄存
器列表regs表示。
该指令一般用于多个寄存器数据的出栈。
type字段种类:
IA:每次传送后地址加1。
IB:每次传送前地址加1。
DA:每次传送后地址减1。
DB:每次传送前地址减1。
FD:满递减堆栈。
ED:空递减堆栈。
FA:满递增堆栈。
EA:空递增堆栈。
堆栈寻址的命令LDMFA/STMFA、LDMEA/STMEA、LDMFD/STMFD、LDMED/STMED。
LDM和STM表示多寄存器寻址,即一次可以传送多个寄存器值。
LDM:一次装载多个,这里用来出栈。
STM:一次存储多个,这里用来入栈。
F/E表示指针指向的位置
F:full满堆栈,表示堆栈指针指向最后一个入栈的有效数据项。
E:empty空堆栈,表示堆栈指针指向下一个要放入的空地址。
A/D表示堆栈的生长方式
A:堆栈向高地址生长,即递增堆栈。
D:堆栈向低地址生长,即递减堆栈。
注意:有一个约定,编号低的寄存器在存储数据或者加载数据时对应于存储器的低地址。
FD、ED、FA和EA指定是满栈还是空栈,是升序栈还是降序栈,用于堆栈寻址。
一个满栈的栈指针指向上次写的最后一个数据单元.
空栈的栈指针指向第一个空闲单元。
一个降序栈是在内存中反向增长而升序栈在内存中正向增长。
{!}:若选用了此后缀,则当指令执行完毕后,将最后的地址写入基址寄存器。
{^}:当regs中不包含PC时,该后缀用于指示指令所用的寄存器为用户模式下的寄存器,
否则指示指令执行时,将寄存器SPSR的值到CPSR中。
2)批量数据存储指令
格式:STM{
功能:将各个寄存器的值存入一片连续的内存单元中,内存单元的起始地址为基址寄存器Rn的值
各个寄存器由寄存器列表regs表示。该指令一般用于多个寄存器数据的入栈。
{^}:指示指令所用的寄存器为用户模式下的寄存器。其他参数用法同LDM指令。
例:STMEAR13!,{R0-R12,PC};将寄存器R0~R12以及程序计数器PC的值保存到R13指示的堆栈中
3.数据交换指令
1)字数据交换指令
格式:SWP
功能:Rd=[op2],[op2]=op1
从op2所表示的内存装载一个字并把这个字放置到目的寄存器Rd中,然后把寄存器op1的内容存储到同一内存地址中。
例:SWPR0,R1,[R2];将R2所表示的内存单元中的字数据装载到R0,然后将R1中的字数据保存到R2所表示的内存单元中
2)字节数据交换指令
格式:SWPB
功能:从op2所表示的内存装载一个字节并把这个字节放置到目的寄存器Rd的低
arm汇编编 相关文章:
- ARM汇编编程基础之四-ARM汇编伪操作(11-27)
- ARM汇编编程基础之三-基本寻址方式与基本指令(11-27)
- ARM汇编编程基础之一-寄存器(11-27)
- ARM汇编编程基础之五-ADS开发环境的使用(11-27)
- ARM汇编编程基础之二-流水线对PC值的影响(11-27)
- ARM汇编编程基础之六-其它寻址模式与其它指令(11-27)