LDR指令

四、关于LDR伪指令 该笔记探讨和验证了LDR伪指令的工作原理,PC偏移值的计算方法。 阅读详情

ARM指令集中,LDR通常都是作加载指令,但是它也可以作伪指令。
初学者一般不会注意到它们的区别,其实在嵌入式开发过程中,这两条指令时非常常用的!我们应该了解他们的区别。

LDR伪指令的形式是“LDR Rn,=expr”。作用是装在一个32bit常数和一个地址到寄存器。
下面举一个例子来说明它的用法。

COUNT EQU       0x56000054
LDR       R1,=COUNT
MOV       R0,#0
STR       R0,[R1]

COUNT是我们定义的一个变量,地址为0x56000054。

LDR       R1,=COUNT   是将COUNT这个变量的地址,也就是0x56000054放到R1中。
MOV      R0,#0是将立即数0放到R0中。

STR    R0,[R1]   是一个典型的存储指令,将R0中的值放到以R1中的值为地址的存储单元去。
实际就是将0放到地址为0x56000054的存储单元中去。
可见这三条指令是为了完成对变量COUNT赋值。

再举一个例子
LDR       R1,=COUNT    ;将COUNT的值赋给R1

LDR       R0,[R1]    ;这条伪指令,是将COUNT的地址赋给R0

ARM是RISC结构,数据从内存到CPU之间的移动只能通过LDR/STR指令来完成。
比如想把数据从内存中某处读取到寄存器中,只能使用ldr
比如:
ldr r0, 0x12345678 ;就是把0x12345678这个地址中的值存放到r0中。

而mov不能干这个活,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中,这个和x86这种CISC架构的芯片区别最大的地方。
x86中没有ldr这种指令,因为x86的mov指令可以将数据从内存中移动到寄存器中。
MOV是从一个寄存器或者移位的寄存器或者立即数的值传递到另外一个寄存器。
从本质上是寄存器到寄存器的传递,为什么会有立即数,其实也是有限制的立即数,不是所有立即数都可以传递的
这个立即数要符合一个8位数循环右移偶数位的取值。
原因是,MOV本身就是一条32bit指令,除了指令码本身,它不可能再带一个可以表示32bit的数字,所以用了其中的12bit来表示立即数,其中4bit表示移位的位数(循环右移,且数值x2),8bit用来表示要移位的一个基数。

另外还有一个就是ldr伪指令,虽然ldr伪指令和ARM的ldr指令很像,但是作用不太一样。ldr伪指令可以在立即数前加上=,以表示把一个地址写到某寄存器中,比如:
ldr r0, =0x12345678
这样,就把0x12345678这个地址写到r0中了。所以,ldr伪指令和mov是比较相似的。只不过mov指令限制了立即数的长度为8位,也就是不能超过512。而ldr伪指令没有这个限制。如果使用ldr伪指令时,后面跟的立即数没有超过8位,那么在实际汇编的时候该ldr伪指令是被转换为 mov指令的。

====

http://hi.baidu.com/lulinhua1010/blog/item/f2ef0902eb72f90a1c958365.html



保姆级教程:一步步创建 ABAP Text Table 有朋友反馈,问有没有一个自己动手创建 Text Table 的例子,因为自己没有动手实践过,总觉得心里不踏实。这个行为的语义是,ZAI_TYPE_T 这张表的 AI_TYPE 字段值,不能随便维护,必须是表。然后另一个需要添加的字段是 AI_TYPE 这个字段值对应的文本值,本例笔者采用 SAP 标准的。也是自己创建的,很简单的一个 Data Element,类型为 CHAR,长度为 2.依次给主表的 01,02,03 三个字段值维护对应的描述信息,最后效果如下。按照下面的字段结构,创建另一。 阅读详情

相关推荐

wifi/BT芯片RTL8723DS驱动移植和测试之一wifi篇

本文主要介绍如何在stm32mp157中移植并测试芯片RTL8723DS的wifi功能。

汉尼拔勇闯天涯 8740

LDR指令和LDR伪指令详解

Edsd1

weixin_42031299的博客 6646

拯救者R9000P-2021-AMD5800H黑苹果EFI配置与优化指南

本文详细介绍了在联想拯救者R9000P 2021款(搭载AMD锐龙7 5800H处理器)上安装和优化黑苹果系统的完整指南。内容涵盖EFI配置、OpenCore引导设置、关键驱动(如NootedRed核显驱动)的调整,以及安装后的性能调优与常见问题解决,旨在帮助开发者和极客用户在这款游戏本上搭建稳定可用的macOS开发环境。

weixin_29291069的博客 285

LDR指令和LDR伪指令区别

ARM指令集中,LDR通常都是作加载指令,但是它也可以作伪指令。初学者一般不会注意到它们的区别,其实在嵌入式开发过程中,这两条指令时非常常用的!我们应该了解他们的区别。LDR伪指令的形式是“LDR Rn,=expr”。作用是装在一个32bit常数和一个地址到寄存器。下面举一个例子来说明它的用法。COUNT EQU       0x56000054LDR       R1,=COUNTMOV

牛牛猛嵌入式的专栏 1878

一文掌握DrissionPage的详细使用

是一个基于 Python 的网页自动化工具,主要用于网页数据的抓取、自动化操作和测试。它结合了 Selenium 和 Requests 的优点,提供了更简洁、高效的 API,适用于各种网页自动化任务。DrissionPage 是一个功能强大且易于使用的网页自动化工具,适用于各种网页自动化任务。希望本文的 DrissionPage 的基本使用方法和一些高级功能能够帮助到你。

数据知道的博客 1万+

Prompt提示优化工具

在大模型使用过程中,Prompt尤为重要。一个好的Prompt可以解决很多的问题。那么如何撰写一个完美的Prompt?下面汇总了一些Prompt工具,可以辅助日常Prompt的编写。

HJ_blog 3108

ARM将常数加载到寄存器方法之LDR伪指令

LDR伪指令

菜鸡搞计算机 994

Qt C++ 的虚拟演播室系统

**数据流转**:OpenCV 处理的图像格式通常是 `cv::Mat`,而 Qt 3D 渲染需要 `QImage` 或 `QTexture2D`。// 临时用颜色代替。// 前景在背景前面。#### 3.3 主窗口与 Qt 3D 集成 (`mainwindow.h` / `.cpp` / `.ui`)* **更复杂的 3D 场景**:加载 3D 模型(.obj, .gltf 等)作为背景和道具。1. **构建项目**:确保 `.pro` 文件中的 OpenCV 路径配置正确,然后构建项目。

寒寒豆豆软件公司的博客 111

RTOS系列(13):汇编LDR指令、LDR伪指令、[Rn]寄存器间接引用 详细解析

汇编LDR指令在RTOS中使用的比较频繁,尤其是在PendSV中进行上下文切换的时候,LDR指令是不可缺少的,我们在看uC/OS、FreeRTOS、RT-Thread的源码时,都能够看到LDR的身影。由于LDR指令有2个名字LDR指令、LDR伪指令,这就给我们理解LDR带来了困难,很容易混淆。本文就详细分析一下汇编LDR、[Rn]间接引用的原理。......

猪哥的专栏 4491

元学习与Transformer的结合:Meta-Transformer架构解析

我们生活在一个信息爆炸的时代,每天都会产生海量的数据。在深度学习领域,如何让模型更高效地学习、更快地适应新的任务,一直是科学家们努力的方向。元学习和Transformer都是深度学习中的重要概念,它们各自有着独特的优势。本文的目的就是深入剖析将元学习和Transformer结合起来的Meta - Transformer架构,探讨它的原理、应用以及未来发展。我们会从基础概念讲起,逐步深入到架构的各个方面,让大家对Meta - Transformer有一个全面的了解。

AI智能探索者的博客 1052

YOLO11 改进、魔改|分组残差自注意力GRSA,通过分组残差优化 QKV 计算、指数空间映射优化位置偏差,在大幅降低自注意力模块参数和计算量的同时,增强特征关系与位置信息的表征能力

【摘要】研究人员提出GRSA(分组残差自注意力)机制,解决Transformer在图像超分辨率任务中效率与性能难以兼顾的问题。GRSA通过分组残差层减少自注意力参数冗余,同时采用指数空间相对位置偏差优化位置信息表征。实验表明,GRSA在降低50%参数量的同时保持模型性能,适用于目标检测和图像分割任务。在YOLO系列模型中集成GRSA可提升小目标检测精度,代码实现已开源,详细部署教程见相关视频与GitHub资源。该机制为轻量化Transformer模型提供了高效解决方案。

qq_64693987的博客 795

汇编LDR指令

接下来是LDR,首先要说的是有两个家伙,他们都叫LDR。 一个是LDR伪指令,一个是LDR指令,名字相同却不是一个东西。 区分的方法就是看第二个参数,如果有等号,就是伪指令。 LDR指令: 例1: ldr r0, 0x12345678 // 就是把0x12345678这个地址中的值存放到r0中。而mov不能干这个活,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中。 例2:ldr...

JadyC的博客 3万+

【Windows Server 2019】活动目录 (Active Directory) ——将计算机加入域和脱离域

博文介绍了如何将计算机加入AD域和脱离AD域,包括加入域,验证客户机加入到域后的信息,使用域账户用户在客户机上登录,使用本地账户用户在计算机上登录,脱离域。

VMware, Windows, Linux, Cisco, Container, Kubernetes, Kali 6169

ldr加载指令,ldr伪指令

转载于http://www.cnblogs.com/hnrainll/archive/2011/06/14/2080241.html 一、ldr作为加载指令 (1)格式为:LDR{条件} 目的寄存器, (2)LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。该指令通常用亍从存储器中读取32位的字数据到通用寄存器,然后对数据迕行处理。当程序计数器PC作为目的寄存器时,指

主要记录嵌入式学习与开发过程。 2万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LDR伪指令和LDR指令及MOV指令的区别

1.前言 ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。 2.LDR指令 就是将地址中的值存放到寄存器中 比如想把数据从内存中某处读取到寄存器中,只能使用ldr,比如: ldr r0, 0x12345678 就是把0x12345678这个地址中的值存放到r0中。 而mov不能干这个活,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中,这个和x86这种CISC架构的芯片区别最大的地方。x86中没有ldr这种指令,因为x86的mov指令可以将数据

HZero 2453

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

嵌入式汇编—— LDR 指令和 LDR 伪指令的区别

LDR 加载指令是 CPU 指令,完成实质性的数据传送。用于从内存中加载数据到寄存器中。 LDR 指令是字加载指令,用于从存储器中将一个 32 位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取 32 位的字数据到通用寄存器,然后对数据进行处理。当程序计数器 PC 作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。 LDR{条件} 目的寄存器,<...

在到处之间找我 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

说说ARM汇编的LDR伪指令

我们知道ARM CPU中有一条被广泛使用的指令LDR,它主要是用来从存储器(确切地说是地址空间)中装载数据到通用寄存器。但不论是ARMASM还是GNU ARM AS,都提供了一条与之同名的伪指令LDR,而在实际中使用该伪指令的情况也较多,那他们有什么不同呢?下面我谈谈我的理解。    由于我使用GNU工具链,所以以下的内容都以GNU AS的ARM语法为准。    LDR伪指令的语法形式如下

axx1611的专栏 3万+

LDR指令和LDR伪指令

niuniumenghua的专栏 3722

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

ARM中LDR伪指令与LDR加载指令 ARM指令集中,LDR通常都是作加载指令的,但是它也可以作伪指令。 LDR伪指令的形式是“LDR Rn,=expr”。下面举一个例子来说明它的用法。 COUNT EQU 0x40003100 …… LDR R1,=COUNT MOV R0,#0 STR R0,[R1] COUNT是我们定义的一个变量...

ll148305879的博客 604

LDR 和MOV 指令区别

LDR 和MOV 指令区别 ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。 比如想把数据从内存中某处读取到寄存器中,只能使用ldr 比如: ldr r0, 0x12345678 就是把0x12345678这个地址中的值存放到r0中。 而mov不能干这个活,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中,这个和x86这种CIS...

ll148305879的博客 2174

【ARM 常见汇编指令学习 7 - LDR 指令与LDR伪指令及 mov指令】

而ldr伪指令没有这个限制,如果使用ldr伪指令后面的立即数没有超过8位,那么汇编将会使用mov指令去替换LDR伪指令。两者虽然名字相同但是作用却不相同,区分两者的方法就是看第二个参数,如果有等号,就是LDR伪指令。mov 后面的立即数可以进行位移操作,位移的位数范围是。,步长为2,所以实际上可以表示的立即数范围更大。mov 指令限制了立即数的长度为8位,立即数范围是。如上面arm汇编代码是将地址。(x9 32bit形式)中。上面语句的作用是将地址。指令来做这个事情,因为。

CodingCos的博客 3276

MOV指令、LDR指令、LDR伪指令之间的区别

1、MOV指令 MOV指令可以把立即数或者寄存器内容(注意:这里绝对不可以是内存!!)传递给一个寄存器。  立即数相当于高级语言中的常量(常数), 立即数就是数字嘛,表示数值的数字, 存储器用的是地址,一般立即数前需要加#, MOV对于立即数是有要求的,就是下面的“8位图”数据。 只能由一个8bit连续有效位通过偶数次移位得到的数。   它为什么会有这样的限制呢?

qingkongyeyue的博客 1万+

ARM 指令 LDR

ARM指令

rayn的专栏 9352

arm汇编—ldr加载指令,ldr伪指令

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

如丧 2821
上一篇: Linux 用户管理 (添加-删除-修改)
下一篇: Cortex-M3那点事
Alan0521
博客等级 码龄19年 77粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值