首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ARM汇编指令(5)

ARM汇编指令(5)

2LDRB指令
LDRB指令的格式为:

LDR{条件}B 目的寄存器,<存储器地址>
LDRB指令用于从存储器中将一个8位的字节数据传送到目的寄存器中,同时将寄存器的高24位清零。 该指令通常用于从存储器中读取8位的字节数据到通用寄存器,然后对数据进行处理。当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目 的地址,从而可以实现程序流程的跳转。
指令示例:
LDRB R0[R1]   
;将存储器地址为R1的字节数据读入寄存器 R0,并将R0的高24
;位清零。
LDRB R0[R1,#8]      ;将存储器地址为R18的字节数据读入寄存器R0,并将 R0
;高24位清零。
3LDRH指令
LDRH指令的格式为:

LDR{条件}H 目的寄存器,<存储器地址>
LDRH指令用于从存储器中将一个16位的半字数据传送到目的寄存器中,同时将寄存器的高16位清零。 该指令通常用于从存储器中读取16位的半字数据到通用寄存器,然后对数据进行处理。当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作 目的地址,从而可以实现程序流程的跳转。
指令示例:
LDRH   R0[R1]            ;将存储器地址为R1的半字数据读入寄存器 R0,并将R0的高
16位清零。
LDRH R0[R1,#8]     ;将存储器地址为R18的半字数据读入寄存器R0,并将R0
;高16位清零。
LDRH R0[R1R2]     ;将存储器地址为R1R2的半字数据读入寄存器R0,并将 R0
;高16位清零。
4STR指令
STR指令的格式为:

STR{条件} 源寄存器,<存储器地址>
STR指令用于从源寄存器中将一个32位的字数据传送到存储器中。 该指令在程序设计中比较常用,且寻址方式灵活多样,使用方式可参考指令LDR
指令示例:
STR R0[R1],#8          ;将R0中的字数据写入以R1为地址的存储器中,并 将新地址
R18写入R1
STR R0[R1,#8]         ;将R0中的字数据写入以R18为地址的存储器中。
5STRB指令
STRB指令的格式为:

STR{条件}B 源寄存器,<存储器地址>
STRB指令用于从源寄存器中将一个8位的字节数据传送到存储器中。该字节数据为源寄存器中的低8位。
指令示例:
STRB    R0[R1]            ;将寄存器R0中的字节数据写入以R1为地 址的存储器中。
STRB    R0[R1,#8]    ;将寄存器R0中的字节数据写入以R18为地址的存储器中。
6STRH指令
STRH指令的格式为:

STR{条件}H 源寄存器,<存储器地址>
STRH指令用于从源寄存器中将一个16位的半字数据传送到存储器中。该半字数据为源寄存器中的低16位。
指令示例:
STRH   R0[R1]           ;将寄存器R0中的半字数据写入以R1为地址的 存储器中。
STRH   R0[R1,#8]   ;将寄存器R0中的半字数据写入以R18 为地址的存储器中。

六、批量数据加载/存储指令。ARM微处理器所支持批量数据加载/存储指令可以一次在一片连续的存储器单元和多个寄存器之间传送数据,批量加载指令 用于将一片连续的存储器中的数据传送到多个寄存器,批量数据存储指令则完成相反的操作。常用的加载存储指令如下:LDM(或STM)指令

LDM(或STM)指令的格式为:
LDM(或STM{条件}{类型} 基址寄存器{},寄存器列表{}
LDM(或STM)指令用于从由基址寄存器所指示的一片连续存储器到寄存器列表所指示的多个寄存器之间传送数据,该指令的常见用途是将多个寄存器的内容入栈或出栈。其中,{类型} 以下几种情况:
IA    每次传送后地址加1
IB      每次传送前地址加1
DA   每次传送后地址减1
DB   每次传送前地址减1
FD   满递减堆栈;
ED   空递减堆栈;
FA   满递增堆栈;
EA   空递增堆栈;
{}为可选后缀,若选用该后缀,则当数据 传送完毕之后,将最后的地址写入基址寄存器,否则基址寄存器的内容不改变。
基址寄存器不允许为R15,寄存器列表可以为R0R15的任意组合。
{}为可选后缀,当指令为LDM且寄存器列表中包含R15,选用该后缀时表示:除了正常的数据传送之外,还将SPSR复制到CPSR。同时,该后缀还表 示传入或传出的是用户模式下的寄存器,而不是当前模式下的寄存器。
指令示例:
STMFD R13!{R0R4-R12LR}       ;将寄存器列表中的寄存器(R0R4R12LR)存入堆栈。
LDMFD R13! {R0R4-R12PC}      ;将堆栈内容恢复到寄存器(R0R4R12LR)。
继承事业,薪火相传
返回列表