当前位置: 首页 > article >正文

指令系统2(Load/Store 指令)

一. Load/Store 指令

1. 前变址

前变址指令是在读取或存储数据时,先根据基址寄存器(Rn)与偏移量(offset)计算出有效地址,再进行数据操作。相关指令及示例如下:

  • LDR R0, [R1, #4]:从地址R1 + 4处读取一个字(32 位)到R0。假设R1 = 0x10000000,指令执行后R0 = 0x88776655R1的值保持为0x10000000 。

  • LDRB R2, [R1, #4]:从地址R1 + 4处读取一个字节(8 位)到R2,高位补零扩展为 32 位。执行后R2 = 0x00000055R1的值不变。

  • LDRH R3, [R1, #4]:从地址R1 + 4处读取一个半字(16 位)到R3,高位补零扩展为 32 位。执行后R3 = 0x00006655R1的值不变。

  • LDRSB R4, [R1, #7]:从地址R1 + 7处读取一个字节,执行符号扩展成 32 位后存入R4。执行后R4 = 0xFFFFFFFF88R1的值不变。

前变址指令详细说明如下:

指令

功能描述

LDRB Rd, [Rn, offset]

从地址Rn + offset处读取一个字节到Rd

LDRH Rd, [Rn, offset]

从地址Rn + offset处读取一个半字到Rd

LDR Rd, [Rn, offset]

从地址Rn + offset处读取一个字到Rd

LDRD Rd1, Rd2, [Rn, offset]

从地址Rn + offset处读取一个双字(64 位整数)到Rd1(低 32 位)和Rd2(高 32 位)中

STRB Rd, [Rn, offset]

Rd中的低字节存储到地址Rn + offset

STRH Rd, [Rn, offset]

Rd中的低半字存储到地址Rn + offset

STR Rd, [Rn, offset]

Rd中的低字存储到地址Rn + offset

STRD Rd1, Rd2, [Rn, offset]

Rd1(低 32 位)和Rd2(高 32 位)表达的双字存储到地址Rn + offset

LDRSB Rd, [Rn, offset]
LDRSH Rd, [Rn, offset]

字节 / 半字的自动变址加载,并且在加载后执行符号扩展成 32 位

2.自动变址

自动变址指令在完成数据操作后,会自动对基址寄存器进行调整。

以   LDR.W R0, [R1, #20]!  为例,执行步骤如下:

  • 先计算R1 = R1 + 20 。

  • 然后将计算后的地址R1中的数据读取到R0 。

自动变址指令详细说明如下:

指令

功能描述

LDR.W Rd, [Rn, offset]!
LDRB.W Rd, [Rn, offset]!
LDRH.W Rd, [Rn, offset]!
LDRD.W Rd1, Rd2, [Rn, offset]!

字 / 字节 / 半字 / 双字的自动变址加载(不做带符号扩展,没有用到的高位全部置 0)

LDRSB.W Rd, [Rn, offset]!
LDRSH.W Rd, [Rn, offset]!

字节 / 半字的自动变址加载,并且在加载后执行符号扩展成 32 位整数

STR.W Rd, [Rn, offset]!
STRB.W Rd, [Rn, offset]!
STRH.W Rd, [Rn, offset]!
STRD.W Rd1, Rd2, [Rn, offset]!

字 / 字节 / 半字 / 双字的自动变址存储

3.后变址

后变址指令先以基址寄存器(Rn)的当前值进行数据操作,然后再对基址寄存器进行调整。

STR.W R0, [R1], #-12为例,执行步骤如下:

  • 先将R0的数据存储到地址R1处。

  • 然后计算R1 = R1 + (-12) 。

后变址指令详细说明如下:

指令

功能描述

LDR.W Rd, [Rn], offset
LDRB.W Rd, [Rn], offset
LDRH.W Rd, [Rn], offset
LDRD.W Rd1, Rd2, [Rn], offset

字 / 字节 / 半字 / 双字的带后索引加载(不做带符号扩展,没有用到的高位全清 0)

LDRSB.W Rd, [Rn], offset

字节 / 半字的带后索引加载,并且在加载后执行符号扩展成 32 位整数

STR.W Rd, [Rn], offset
STRB.W Rd, [Rn], offset
STRH.W Rd, [Rn], offset
STRD.W Rd1, Rd2, [Rn], offset

字 / 字节 / 半字 / 双字的带后索引存储

后变址应用举例:

  • LDR R0, [R1], #4:假设R1 = 0x10000000,先从地址R1(即0x10000000)处读取一个字到R0R0 = 0x44332211,然后R1 = R1 + 4 = 0x10000004 。

  • LDRB R2, [R1], #4:从地址R1(此时R1 = 0x10000004)处读取一个字节到R2R2 = 0x00000011,接着R1 = R1 + 4 = 0x10000004 。

  • LDRH R3, [R1], #4:从地址R10x10000004)处读取一个半字到R3R3 = 0x00002211,之后R1 = R1 + 4 = 0x10000004 。

  • LDRSB R4, [R1], #7:从地址R10x10000004)处读取一个字节并符号扩展到 32 位存入R4R4 = 0x00000011,最后R1 = R1 + 7 = 0x10000007 。

Load/Store 指令综合举例(字序调整):


假设内存地址0x1000处存储的值为0x12345678ABCDEF00,执行以下指令:

  • LDR R2, =0x1000:将地址0x1000加载到R2 。

  • LDRD.W R0, R1, [R2]:从地址R2(即0x1000)处读取一个双字,R0 = 0xABCDEF00R1 = 0x12345678 。

  • STRD.W R1, R0, [R2]:把R1(低 32 位)和R0(高 32 位)存储到地址R20x1000)处,此时(0x1000) = 0xABCDEF0012345678 。

二. 批量数据传送指令

1. 批量数据 Load/Store 指令

这些指令用于在内存与多个寄存器之间批量传输数据,Rd后面的!表示在每次访问前(Before)或访问后(After),要自增(Increment)或自减(Decrement)基址寄存器Rd的值,增 / 减单位为 1 个字(4 字节)。具体指令如下:

指令

功能描述

LDMIA Rd!, {寄存器列表}

Rd处读取多个字,每读一个字后Rd自增一次,16 位宽度

STMIAR Rd, {寄存器列表}

存储多个字到Rd处,每存一个字后Rd自增一次,16 位宽度

LDMIA.W Rd!, {寄存器列表}

Rd处读取多个字,每读一个字后Rd自增一次,32 位宽度

LDMDB.W Rd!, {寄存器列表}

Rd处读取多个字,每读一个字前Rd自减一次,32 位宽度

STMIA.W Rd!, {寄存器列表}

存储多个字到Rd处,每存一个字后Rd自增一次,32 位宽度

STMDB.W Rd!, {寄存器列表}

存储多个字到Rd处,每存一个字前Rd自减一次,32 位宽度

例如,当R8 = 0x8000时:

  • STMIA.W R8!, {R0 - R3}:每存储一次,R8的值增加 4 字节,先存储R0 - R3的值,然后R8自增。执行后R8值变为0x8010 。

  • STMDB.W R8!, {R0 - R3}:每存储一次,R8的值减少 4 字节,先自减R8,然后存储R0 - R3的值。执行后R8值变为0x7FF0 。

2.堆栈传送类指令

  • STMDB SP!, [R0 - R3, LR]:等效于PUSH {R0 - R3, LR},将寄存器R0 - R3和链接寄存器LR的值压入堆栈,堆栈指针SP在存储前递减。

  • LDMIIA SP!, {R0 - R3, PC}:等效于POP {R0 - R3, PC},从堆栈中弹出数据到寄存器R0 - R3和程序计数器PC,堆栈指针SP在读取后递增。

相关文章:

指令系统2(Load/Store 指令)

一. Load/Store 指令 1. 前变址 前变址指令是在读取或存储数据时,先根据基址寄存器(Rn)与偏移量(offset)计算出有效地址,再进行数据操作。相关指令及示例如下: LDR R0, [R1, #4]:从…...

【实战案例】用STAR+3W模型拆解电商支付系统设计文档

各位开发者朋友,上次分享了结构化写作的黄金公式后,很多同学反馈需要更具象的落地方法。今天通过真实电商支付系统案例,手把手教你用STAR3W模型写出可执行的设计文档! 结构化写作的「黄金公式」 STAR原则 3W模型 Situation&…...

C#使用SnsPictureBox.dll绘制点,线段、圆、折线、多边形、测量尺等多种图形。

CSDN下载地址:https://download.csdn.net/download/sns1991sns/87726867 gitee下载地址:https://gitee.com/linsns/SnsPictrueBox 支持2种绘制方式:响应式和等待式。 一、使用响应式绘制图形 1、在窗口构造函数里添加绘制图形的完成响应函数 public…...

如何让节卡机器人精准对点?

如何让节卡机器人精准对点? JAKA Zu 软件主界面主要由功能栏、开关栏、菜单栏构成。 菜单栏:控制柜管理,机器人管理与软件管理组成。主要功能为对控制柜关机、APP 设置、机器人本体设 置、控制柜设置、连接机器人和机器人显示等功能。 开关…...

文转语音好用的平台

一、国外平台推荐 第一梯队:全球头部服务 Amazon Polly(AWS) 特点:支持 70语言/方言,提供神经语音(NTTS)和标准语音,可克隆声音(Voice Designer)。平台&…...

常见JavaScript页面部分内容显示/隐藏设置总结

项目中经常遇到通过js判断对页面中某一部分进行显示/隐藏设置的场景,经常使用的是display,有时也会使用visibility、opacity,为此,特意查询了相关内容,对其进行了一下汇总记录下: 除了 display&#xff0c…...

在 Spring Boot 中调用 AnythingLLM 的发消息接口

整体逻辑: 自建系统的web UI界面调用接口: 1.SpringBoot接口:/anything/chatMessageAnything 2.调用anythingLLM - 调用知识库deepseek r1 . Windows Installation ~ AnythingLLMhttps://docs.anythingllm.com/installation-desktop/windows http://localhost:3…...

TextView、AppCompatTextView和MaterialTextView该用哪一个?Android UI 组件发展史与演进对照表

在 Android 开发中,UI 组件一直在不断演进,从最初的原生组件,到 Support Library(AppCompat 兼容库),再到如今的 Material Design 组件。这篇文章将梳理 Android UI 组件的发展历史,并提供详细的…...

[GHCTF 2025]Popppppp[pop链构造] [php原生类的利用] [双md5加密绕过]

题目 <?php error_reporting(0);class CherryBlossom {public $fruit1;public $fruit2;public function __construct($a) {$this->fruit1 $a;}function __destruct() {echo $this->fruit1;}public function __toString() {$newFunc $this->fruit2;return $new…...

2025.3.20总结

阅读&#xff1a;《时间贫穷》第二章&#xff0c;里面讲到&#xff0c;运动&#xff0c;多行善事&#xff0c;体验自然&#xff0c;都会增强自我效能感&#xff0c;是对抗时间焦虑的强有力的方式。 花时间运动是值得的&#xff0c;公司每周三都是运动周&#xff0c;把运动视作…...

Tr0ll2靶机详解

一、主机发现 arp-scan -l靶机ip&#xff1a;192.168.55.164 二、端口扫描、漏洞扫描、目录枚举、指纹识别 2.1端口扫描 nmap --min-rate 10000 -p- 192.168.55.164发现21端口的ftp服务开启 以UDP协议进行扫描 使用参数-sU进行UDP扫描 nmap -sU --min-rate 10000 -p- 19…...

制造业数字化转型,汽车装备制造企业数字化转型案例,智能制造数字化传统制造业数字化制造业数字化转型案例

《某制造业企业信息化整体解决方案》PPT展示了一个汽车装备企业的整体信息化解决方案&#xff0c;阐述了该企业的业务特点和现状&#xff0c;主要包括按订单生产、多级计划和产品跟踪等&#xff0c;分析了信息化建设的主要困难&#xff0c;如信息管理手工化、过程数据追溯困难、…...

PyTorch模型转ONNX例子

参考&#xff1a;(optional) Exporting a Model from PyTorch to ONNX and Running it using ONNX Runtime — PyTorch Tutorials 2.6.0cu124 documentation import numpy as np import torch.utils.model_zoo as model_zoo import torch.onnx import torch.nn as nn import t…...

科技云报到:AI Agent打了个响指,商业齿轮加速转动

科技云报到原创。 3月16日&#xff0c;百度旗下文心大模型4.5和文心大模型X1正式发布。目前&#xff0c;两款模型已在文心一言官网上线&#xff0c;免费向用户开放。 同时&#xff0c;文心大模型4.5已上线百度智能云千帆大模型平台&#xff0c;企业用户和开发者登录即可调用AP…...

【蓝桥杯python研究生组备赛】005 数学与简单DP

题目1 01背包 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 第一行两个整数&a…...

Chapter 4-16. Troubleshooting Congestion in Fibre Channel Fabrics

Show FCS Ie Example 4-17 shows the NX-OS command show fcs ie on Cisco MDS switches. 例 4-17 显示了 Cisco MDS 交换机上的 NX-OS 命令 show fcs ie。 Example 4-17 NX-OS command show fcs ie on Cisco MDS switches MDS9706-C# show fcs ie IE List for VSAN: 20 --…...

抖音视频数据获取实战:从API调用到热门内容挖掘

在短视频流量为王的时代&#xff0c;掌握抖音热门视频数据已成为内容运营、竞品分析及营销决策的关键。本文将手把手教你通过抖音开放平台API获取视频详情数据&#xff0c;并提供完整的代码实现及商业化应用思路。 一、抖音API权限申请与核心接口 抖音API需企业资质认证&…...

大白话读懂java对象创建的过程

1. java对象创建流程&#xff08;大白话版&#xff09; 咱们java对象被创建的过程大致如下&#xff0c;即&#xff1a; 在 JVM 中对象的创建&#xff0c;从⼀个 new 指令开始&#xff1a; 首先检查这个指令的参数是否能在常量池中定位到⼀个类的符号引用检查这个符号引用代表…...

Ubutu20.04安装docker与docker-compose

系统&#xff1a;20.04.6 LTS (Focal Fossa)" 1.配置apt源(在/etc/apt/sources.list中输入以下内容) # deb cdrom:[Ubuntu 20.04.6 LTS _Focal Fossa_ - Release amd64 (20230316)]/ focal main restricted deb http://mirrors.aliyun.com/ubuntu/ focal main restricted …...

AI图像理解技术的演进

在CLIP等现代多模态模型出现之前&#xff0c;早期的图生文技术主要依赖人工标注的ImageNet等数据集&#xff0c;但其技术路线与当前方法存在本质差异。 一、传统图生文技术的标注依赖 ImageNet的核心地位 在2012-2020年间&#xff0c;ImageNet的1,400万张人工标注图像&#xff…...

STM32 —— MCU、MPU、ARM、FPGA、DSP

在嵌入式系统中&#xff0c;MCU、MPU、ARM、FPGA和DSP是核心组件&#xff0c;各自在架构、功能和应用场景上有显著差异。以下从专业角度详细解析这些概念&#xff1a; 一、 MCU&#xff08;Microcontroller Unit&#xff0c;微控制器单元&#xff09; 核心定义 集成系统芯片&a…...

aiosignal

文章目录 安装 一、关于 aiosignal Github : https://github.com/aio-libs/aiosignal官方文档&#xff1a;https://aiosignal.aio-libs.org/gitter聊天&#xff1a;https://gitter.im/aio-libs/Lobby许可证 : Apache 2 aiosignal 管理 asyncio 项目中回调的项目。 Signal是已…...

在 VSCode 远程开发环境下使用 Git 常用命令

在日常开发过程中&#xff0c;无论是单人项目还是团队协作&#xff0c;Git 都是版本管理的利器。尤其是在使用 VSCode 连接远程服务器进行代码开发时&#xff0c;Git 不仅能帮助你管理代码版本&#xff0c;还能让多人协作变得更加高效。本文将介绍一些常用的 Git 命令&#xff…...

电脑节电模式怎么退出 分享5种解决方法

在使用电脑的过程中&#xff0c;许多用户为了节省电力&#xff0c;通常会选择开启电脑的节能模式。然而&#xff0c;在需要更高性能或进行图形密集型任务时&#xff0c;节能模式可能会限制系统的性能表现。这时&#xff0c;了解如何正确地关闭或调整节能设置就显得尤为重要了。…...

kubernetes高级实战

一、模拟企业环境进行一个实战部署 [rootmaster node]# kubectl apply -f pod-tomcat.yaml pod/tomcat-test created [rootmaster node]# kubectl get pods NAME READY STATUS RESTARTS AGE tomcat-test 2/2 Running 0 2s [rootmaster node]…...

【Java】——程序逻辑控制(构建稳健代码的基石)

&#x1f381;个人主页&#xff1a;User_芊芊君子 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 &#x1f50d;系列专栏&#xff1a;【Java】内容概括 文章目录&#xff1a; 一.顺序结构二.分支结构1.if 语句1.1 语法格式11.2 语法格式21.3 语法格式3 …...

QT编程之PCM音频处理

一、高级播放接口&#xff08;未压缩编码的音频文件&#xff09; ‌QMediaPlayer‌ 支持MP3/WMA等压缩格式及网络流媒体播放&#xff0c;集成媒体控制&#xff08;播放/暂停/进度调节&#xff09;需设置QAudioOutput指定输出设备&#xff0c;支持播放速度调节&#xff08;setPl…...

卫星互联网智慧杆:开启智能城市新时代​

哇哦&#xff01;在当下这个数字化浪潮正以雷霆万钧之势席卷全球的超酷时代&#xff0c;智慧城市建设已然成为世界各国你追我赶、竞相发力的核心重点领域啦&#xff01;而咱们的卫星互联网智慧杆&#xff0c;作为一项完美融合了卫星通信与物联网顶尖技术的创新结晶&#xff0c;…...

Numpy broadcasting规则

Numpy的broadcast操作是为了将两个不同形状的数组&#xff0c;通过一系列规则&#xff0c;变换成形状相同的数组&#xff0c;从而使得它们之间可以进行按元素进行的计算。 Broadcasting的机制并不复杂&#xff0c;只要记住以下几条规则就可以了&#xff1a; 1. 顺序。首先&am…...

掌握 Shopee 商品数据:用爬虫解锁无限商机

在电商的浩瀚宇宙中&#xff0c;Shopee 宛如一颗璀璨星辰&#xff0c;吸引着无数卖家与买家在此汇聚。对于电商从业者、市场调研人员或是数据分析师而言&#xff0c;获取 Shopee 店铺的商品信息就如同掌握了开启财富之门的钥匙。而爬虫技术&#xff0c;正是帮助我们高效获取这些…...