微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > arm汇编编程(示例)

arm汇编编程(示例)

时间:11-09 来源:互联网 点击:

器。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的低

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top