arm汇编中的加载指令

简介: arm加载指令解析

分类

1加载指令有四个:LDR、LDRB、LDRH、LDM
2存储指令有四个:STR、STRB、STRH、STM
image.png

理论基础
LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。

   LDR  R0,[R1]             ;将存储器地址为R1的字数据读入寄存器R0。
  LDR  R0,[R1,R2]  ;将存储器地址为R1+R2的字数据读入寄存器R0。
  LDR  R0,[R1,#8] ;将存储器地址为R1+8的字数据读入寄存器R0。
  LDR  R0,[R1,R2] !     ;将存储器地址为R1+R2的字数据读入寄存器R0,并将新地址R1+R2写入R1。
  LDR  R0,[R1,#8] !       ;将存储器地址为R1+8的字数据读入寄存器R0,并将新地址R1+8写入R1。
  LDR  R0,[R1],R2        ;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2写入R1。
   LDR  R0,[R1,R2,LSL#2]!;将存储器地址为R1+R2×4的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。
   LDR  R0,[R1],R2,LSL#2  ;将存储器地址为R1的字数据读入寄存器 R0,并将新地址R1+R2×4写入R1

 LDRB指令用于从存储器中将一个8位的字节数据传送到目的寄存器中,同时将寄存器的高24位清零。
   LDRB  R0,[R1]      ;将存储器地址为R1的字节数据读入寄存器R0,并将R0的高24位清零。
   LDRB  R0,[R1,#8]     ;将存储器地址为R1+8的字节数据读入寄存器R0,并将R0的高24位清零。

   LDRH指令用于从存储器中将一个16位的半字数据传送到目的寄存器中,同时将寄存器的高16位清零。
  LDRH  R0,[R1]      ;将存储器地址为R1的半字数据读入寄存器R0,并将R0的高16位清零。
  LDRH  R0,[R1,#8]     ;将存储器地址为R1+8的半字数据读入寄存器 R0,并将R0的高16位清零。
  LDRH  R0,[R1,R2]     ;将存储器地址为R1+R2的半字数据读入寄存器R0,并将R0的高16位清零。

 STR指令用于从源寄存器中将一个32位的字数据传送到存储器中。
     STR R0,[R1],#8 ;将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1。
    STR R0,[R1,#8] ;将R0中的字数据写入以R1+8为地址的存储器中。

STRB指令用于从源寄存器中将一个8位的字节数据传送到存储器中。
STRB  R0,[R1];将寄存器R0中的字节数据写入以R1为地址的存储器中。
STRB  R0,[R1,#8]     ;将寄存器R0中的字节数据写入以R1+8为地址的存储器中。

 STRH指令用于从源寄存器中将一个16位的半字数据传送到存储器中。
        STRH  R0,[R1]      ;将寄存器R0中的半字数据写入以R1为地址的存储器中。
  STRH  R0,[R1,#8]     ;将寄存器R0中的半字数据写入以R1+8为地址的存储器中。

后缀解析
LDM 批量数据加载指令
STM 批量数据存储指令

    常见后缀
    IA 每次传送后地址加1;
    IB 每次传送前地址加1;
    DA 每次传送后地址减1;
    DB 每次传送前地址减1;
    FD 满递减堆栈;
    ED 空递减堆栈;
    FA 满递增堆栈;
    EA 空递增堆栈;

STMFD  R13!,{R0,R4-R12,LR}  ;将寄存器列表中的寄存器(R0,R4 到R12,LR)存入堆栈。
LDMFD  R13!,{R0,R4-R12,PC}  ;将堆栈内容恢复到寄存器(R0,R4到R12,LR)。
相关文章
|
1月前
|
编译器
【ARM汇编速成】零基础入门汇编语言之基本认识(一)
【ARM汇编速成】零基础入门汇编语言之基本认识(一)
|
1月前
|
存储 编译器 C语言
【ARM汇编速成】零基础入门汇编语言之C与汇编混合编程(四)
【ARM汇编速成】零基础入门汇编语言之C与汇编混合编程(四)
【ARM汇编速成】零基础入门汇编语言之C与汇编混合编程(四)
|
1月前
|
存储 移动开发 C语言
【ARM汇编速成】零基础入门汇编语言之指令集(三)
【ARM汇编速成】零基础入门汇编语言之指令集(三)
|
1月前
|
编译器 C语言 计算机视觉
【ARM汇编速成】零基础入门汇编语言之指令集(二)
【ARM汇编速成】零基础入门汇编语言之指令集(二)
138 0
|
2月前
ARM64技术 —— 系统调用指令SVC、HVC和SMC的使用规则
ARM64技术 —— 系统调用指令SVC、HVC和SMC的使用规则
几组汇编指令的比较
几组汇编指令的比较
|
4月前
|
开发者
云上应用管理问题之Arm指令集和Arm公司的特点是什么
云上应用管理问题之Arm指令集和Arm公司的特点是什么
|
4月前
|
存储 机器学习/深度学习 芯片
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
|
4月前
|
存储 算法 安全
深入理解汇编语言:基础语法和常用指令介绍
深入理解汇编语言:基础语法和常用指令介绍
8086 汇编笔记(九):call 指令 和 ret 指令
8086 汇编笔记(九):call 指令 和 ret 指令