• ARM指令集中经常使用的存储和载入指令


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

        —  LDR     字数据载入指令

    —       LDRB    字节数据载入指令

        —  LDRH    半字数据载入指令

        —  STR     字数据存储指令

    —       STRB    字节数据存储指令

        —  STRH    半字数据存储指令

    1、LDR指令

    LDR指令的格式为:

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

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

    指令演示样例:

    LDR   R0[R1]                  ;将存储器地址为R1的字数据读入寄存器R0

    LDR   R0[R1R2]             ;将存储器地址为R1+R2的字数据读入寄存器R0

    LDR   R0[R1,#8]             ;将存储器地址为R1+8的字数据读入寄存器R0

    LDR   R0[R1R2]            ;将存储器地址为R1+R2的字数据读入寄存器R0,并将新地址R1R2写入R1

    LDR   R0[R1,#8]           ;将存储器地址为R1+8的字数据读入寄存器R0,并将新地址R18写入R1

    LDR   R0[R1]R2              ;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1R2写入R1

    LDR   R0[R1R2LSL2]   ;将存储器地址为R1R2×4的字数据读入寄存器R0,并将新地址R1R2×4写入R1

    LDR   R0[R1]R2LSL2     ;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1R2×4写入R1

    2、LDRB指令

    LDRB指令的格式为:

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

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

    指令演示样例:

    LDRB R0[R1]         ;将存储器地址为R1的字节数据读入寄存器R0,并将R0的高24位清零。

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

    3、LDRH指令

    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位清零。

    4、STR指令

    STR指令的格式为:

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

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

    指令演示样例:

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

    STR   R0[R1,#8]    ;将R0中的字数据写入以R18为地址的存储器中。

    5、STRB指令

    STRB指令的格式为:

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

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

    指令演示样例:

    STRB R0[R1]         ;将寄存器R0中的字节数据写入以R1为地址的存储器中。

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

    6、STRH指令

    STRH指令的格式为:

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

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

    指令演示样例:

    STRH R0[R1]         ;将寄存器R0中的半字数据写入以R1为地址的存储器中。

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

  • 相关阅读:
    Ubuntu双系统
    Qt实现 动态化遍历二叉树(前中后层次遍历)
    Qt学习资料
    Qt学习--信号与槽(多窗口的实现)
    Qt 学习-----helloword
    二叉树的前中后层次遍历
    悬浮在网页右侧并可依次展开的菜单导航
    js实现仿华为手机计算器,兼容电脑和手机屏幕
    jquery json实现面向对象 百度十二星座
    knova绘制进度条
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4354591.html
Copyright © 2020-2023  润新知