ARM指令集中常用的存储和加载指令

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

—  LDR     字数据加载指令

—       LDRB    字节数据加载指令

—  LDRH    半字数据加载指令

—  STR     字数据存储指令

—       STRB    字节数据存储指令

—  STRH    半字数据存储指令

1、LDR指令

LDR指令的格式为:

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

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

指令示例:

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。

2、LDRB指令

LDRB指令的格式为:

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

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

指令示例:

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

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

3、LDRH指令

LDRH指令的格式为:

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

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

指令示例:

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

4、STR指令

STR指令的格式为:

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

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

指令示例:

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

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

5、STRB指令

STRB指令的格式为:

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

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

指令示例:

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

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

6、STRH指令

STRH指令的格式为:

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

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

指令示例:

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

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

ARM指令集中常用的存储和加载指令,布布扣,bubuko.com

时间: 2024-12-20 22:21:02

ARM指令集中常用的存储和加载指令的相关文章

存储和加载本地文件(内部存储设备)

Android设备上的所有应用都有一个放置在沙盘中的文件目录,将文件保存到沙盒中可以阻止其他应用的访问. 沙盒目录的全路径为:/data/data/<包名>  用File Explorer查看: 如上图可见,每个应用都在/data/data下有一个以此应用包名命名的文件目录. 而本文就是介绍将文件保存在/data/data/<包名>/files/ 目录下 下面就展示如何在内部存储设备中存储和加载本地文件: 1.创建一个名为 DataStorage的工程 2.准备好布局文件(acti

Android存储和加载本地文件(外部存储设备)

有时候应用需要将数据写入到设备的外部存储上.列如,需要同其他应用或用户共享音乐.图片或者网络下载资料时,保存在外部设备的数据共享起来要比较方便.而且,外部设备通常具有更大的存储空间. 我们可以通过android.os.Environment.getExternalStorageDirectory()方法获取sdCard的路径.再在此路径下创建一个MyFiles的文件,将数据保存在MyFiles文件夹下. 下面就展示如何在外部存储设备中存储和加载本地文件: 1.创建一个名为 DataStorage

Android 文件的存储和加载

Android 文件的存储和加载,主要用于请求网络中json文件的缓存,引入了一个简单的过期时间,供大家参考学习! 文件存储 1 private void saveLocal(String json, int index) { 2 3 BufferedWriter bw = null; 4 try { 5 File dir=FileUtils.getCacheDir(); 6 //在第一行写一个过期时间 7 File file = new File(dir, getKey()+"_"

ARM中LDR伪指令与LDR加载指令

ARM指令集中,LDR通常都是作加载指令的,但是它也可以作伪指令. LDR伪指令的形式是“LDR Rn,=expr”.下面举一个例子来说明它的用法. COUNT EQU       0x40003100 …… LDR       R1,=COUNT MOV      R0,#0 STR       R0,[R1] COUNT是我们定义的一个变量,地址为0x40003100.这中定义方法在汇编语言中是很常见的,如果使用过单片机的话,应该都熟悉这种用法. LDR       R1,=COUNT是将C

嵌入式启动之三:应用程序的三种存储和加载方式

通过前面嵌入式启动方式的学习,再来理解嵌入式应用程序的三种加载方式是比较容易的.一般意义上,启动是为了引导OS到内存,而应用程序则是操作系统run起来后的用户选择,两者是比较相似的.先根据启动的两种方式来介绍应用程序的加载. 1. 对于资源有限型的嵌入式系统,应用程序在编译.链接之后,会通过二进制工具分析可执行文件的格式,抽出code和data段数据,生成.HEX格式或者.BIN格式,下载到SOC内置的flash中.在上电之后就直接执行了.这种加载方式称为离线加载. 2. 对于资源宽裕型的嵌入式

MFC中数据文件的存储和加载

1. 传统的数据存储,将数据定义到一个结构体中,用CFile的方式循环读写数据结构体 struct SData { UINT nNumb; TCHAR sName[20]; COleDateTime date; }; void CfffDlg::OnBnClickedSave() { //另存为对话框 CFileDialog fd(FALSE, _T("*.fff"), _T("example"), OFN_OVERWRITEPROMPT, _T("信息文

Docker容器的导入和导出&amp;存储和加载

保存镜像文件或容器作为一个压缩的文件,和别人进行共享.导出一个容器作为一个tar文件. [[email protected] ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8c892f17fc59 ubuntu:14.04 "/bin/bash" 6 minutes ago Exited (0) 5 minutes ago adoring_ardinghelli 90d654f31d93 u

ARM常用重要的寄存器及指令解释 和 指令英文全称

一.常用的寄存器 r0 -r3    临时变量  用于传递参数,传递返回指,当传递参数的参数大于4个时,用栈空间.即开辟sp fp:frame pointer  记录回溯sp ip: 很少用 ,临时存放sp sp:指向栈顶 lr:link register 用于跳转时记录返回地址 pc:记录cpu运行指令的地址     因为arm采用流水线方式   取值  译码  执行等   pc=pc+8,     即pc指向当前执行的指令的下两条. cpsr :状态寄存器,每种工作模式有自己的cpsr,记录

ARM汇编- LDR加载指令,LDR伪指令

1,ldr加载指令LDR指令的格式为:LDR{条件}  目的寄存器,<存储器地址>LDR指令用亍从存储器中将一个32位的字数据传送到目的寄存器中.该指令通常用亍从存储器中读取32位的字数据到通用寄存器,然后对数据迕行处理.当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转.该指令在程序设计中比较常用,丏寻址方式灵活多样,请读者认真掌握.指令示例: LDR R0,[R1]