奚梦瑶高能少年团走光:2.4.5 加载/存储指令

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 10:37:09

2.4.5  加载/存储指令

ARM微处理器支持加载/存储指令用于在寄存器和存储器之间传送数据,加载指令用于将存储器中的数据传送到寄存器,存储指令则完成相反的操作。常用的加载存储指令如下。

LDR:字数据加载指令。

LDRB:字节数据加载指令。

LDRH:半字数据加载指令。

STR:字数据存储指令。

STRB:字节数据存储指令。

STRH:半字数据存储指令。

1. LDR指令

LDR指令的格式为:

  1. LDR{条件} 目的寄存器, <存储器地址> 

LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取32位的字数据到通用寄存器,然后对数据进行处理。当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。该指令在程序设计中比较常用,且寻址方式灵活多样。

指令示例:

  1. LDR R0, [R1]        ;将存储器地址为R1 的字数据读入寄存器R0  
  2. LDR R0, [R1, R2]    ;将存储器地址为R1+R2 的字数据读入寄存器R0  
  3. LDR R0, [R1, #8]    ;将存储器地址为R1+8 的字数据读入寄存器R0  
  4. LDR R0, [R1, R2] !   
  5. ; 将存储器地址为R1+R2 的字数据读入寄存器R0, 并将新地址R1+R2 写入R1  
  6. LDR R0, [R1, #8] !   
  7. ; 将存储器地址为R1+8 的字数据读入寄存器R0, 并将新地址R1+8 写入R1  
  8. LDR R0, [R1], R2   
  9. ; 将存储器地址为R1 的字数据读入寄存器R0, 并将新地址R1+R2 写入R1  
  10. LDR R0, [R1, R2, LSL#2]!   
  11. ; 将存储器地址为R1+R2′4 的字数据读入寄存器R0, 并将新地址R1+R2′4 写入R1  
  12. LDR R0, [R1], R2, LSL#2   
  13. ; 将存储器地址为R1 的字数据读入寄存器R0, 并将新地址R1+R2′4 写入R1  

2. LDRB指令

LDRB指令的格式为:

  1. LDR{条件}B 目的寄存器, <存储器地址> 

LDRB指令用于从存储器中将一个8位的字节数据传送到目的寄存器中,同时将寄存器的高24位清零。该指令通常用于从存储器中读取8位的字节数据到通用寄存器,然后对数据进行处理。当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。

指令示例:

  1. LDRB R0, [R1]; 将存储器地址为R1 的字节数
    据读入寄存器R0, 并将R0 的高24 位清零  
  2. LDRB R0, [R1, #8]   
  3. ; 将存储器地址为R1+8 的字节数据读入寄存
    器R0, 并将R0 的高24 位清零  

3. LDRH指令

LDRH指令的格式为:

  1. LDR{条件}H 目的寄存器, <存储器地址> 

LDRH指令用于从存储器中将一个16位的半字数据传送到目的寄存器中,同时将寄存器的高16位清零。该指令通常用于从存储器中读取16位的半字数据到通用寄存器,然后对数据进行处理。

当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。

指令示例:

  1. LDRH R0, [R1]   ; 将存储器地址为R1 的半字数据
    读入寄存器R0, 并将R0 的高16 位清零  
  2. LDRH R0, [R1, #8]   
  3. ; 将存储器地址为R1+8 的半字数据读入寄存器R0, 并将R0 的高16 位清零  
  4. LDRH R0, [R1, R2]   
  5. ; 将存储器地址为R1+R2 的半字数据读入寄存器R0, 并将R0 的高16 位清零  

4. STR指令

STR指令的格式为:

  1. STR{条件} 源寄存器, <存储器地址> 

STR指令用于从源寄存器中将一个32位的字数据传送到存储器中。该指令在程序设计中比较常用,且寻址方式灵活多样,使用方式可参考指令LDR。

指令示例:

  1. STR R0, [R1], #8   
  2. ; 将R0 中的字数据写入以R1 为地址的存储器中, 并将新地址R1+8 写入R1  
  3. STR R0, [R1, #8]; 将R0 中的字数据写入以R1+8 为地址的存储器中  

5. STRB指令

STRB指令的格式为:

  1. STR{条件}B 源寄存器, <存储器地址> 

STRB指令用于从源寄存器中将一个8位的字节数据传送到存储器中。该字节数据为源寄存器中的低8位。

指令示例:

  1. STRB R0, [R1]       ;将寄存器R0 中的字节数据写入以R1 为地址的存储器中  
  2. STRB R0, [R1, #8]   ;将寄存器R0 中的字节数据写入以R1+8 为地址的存储器中 

6. STRH指令

STRH指令的格式为:

  1. STR{条件}H 源寄存器, <存储器地址> 

STRH指令用于从源寄存器中将一个16位的半字数据传送到存储器中。该半字数据为源寄存器中的低16位。

指令示例:

  1. STRH R0, [R1]       ;将寄存器R0 中的半字数
    据写入以R1 为地址的存储器中  
  2. STRH R0, [R1, #8]   ;将寄存器R0 中的半字数
    据写入以R1+8 为地址的存储器中