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)。
相关文章
|
4月前
|
存储 机器学习/深度学习 编译器
ARM汇编快速入门
ARM汇编快速入门
133 0
|
3月前
汇编指令学习(寻址方式)
汇编指令学习(寻址方式)
20 0
|
3月前
汇编指令学习(LOOP)
汇编指令学习(LOOP)
15 0
|
3月前
汇编指令学习(CALL,JMP,RET)
汇编指令学习(CALL,JMP,RET)
26 0
|
3月前
|
JavaScript
汇编指令学习(JMP、JE、JS、JP,JO,JB)
汇编指令学习(JMP、JE、JS、JP,JO,JB)
112 0
|
3月前
汇编指令学习(CMP,TEST)
汇编指令学习(CMP,TEST)
24 0
|
3月前
汇编指令学习(AND,OR,XOR,NOT)
汇编指令学习(AND,OR,XOR,NOT)
37 0
|
3月前
汇编指令学习(ADD,SUB,MUL,DIV,XADD,INC,DEC,NEG)
汇编指令学习(ADD,SUB,MUL,DIV,XADD,INC,DEC,NEG)
28 0
|
3月前
汇编指令学习(MOV,MOVSX,MOVZX,LEA,XCHG)
汇编指令学习(MOV,MOVSX,MOVZX,LEA,XCHG)
33 0
|
8月前
|
程序员
汇编基础语法和指令总结+案例(用32位汇编实现插入排序)
汇编基础语法和指令总结+案例(用32位汇编实现插入排序)
106 0