广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >汇编语言LDR指令和LDR伪指令详解
  • 842
分享到

汇编语言LDR指令和LDR伪指令详解

ldr指令和ldr伪指令汇编语言ldr伪指令汇编语言ldr指令 2023-01-28 06:01:20 842人浏览 薄情痞子
摘要

目录LDR指令和LDR伪指令详解ARM32位指令的构成ldr指令和ldr伪指令的使用区别:补充1:补充2:汇编语言ldr伪指令LDR指令和LDR伪指令详解 ARM32位指令的构成 A

LDR指令和LDR伪指令详解

ARM32位指令的构成

ARM是RISC结构,数据从内存到CPU之间的移动只能通过LDR/STR指令来完成。 32bit = 指令码 + 数据。所以32bit的一条指令不可能表示再带一个32bit的数据,实际只有其中的12bit来表示立即数,其中4bit表示移位的位数(循环右移,且数值x2),8bit用来表示要移位的一个基数。这就产生了非法立即数和合法立即数的问题,经过移位操作,不为零的部分不能用8bit表示的数就是非法立即数。ldr伪指令就是用来解决非法立即数问题的。

ldr指令和ldr伪指令的使用区别:

ldr r0, =0xFFF0 @伪指令
ldr r0, 0xFFFF @指令
直观的区别就是ldr伪指令使用时,后面的数据前会有"=",实际使用时,大部分都使用伪指令,这样就不用考虑合法和非法立即数的问题。在编译的时候,编译器会将ldr伪指令进行替换,用文字池的方式来解决非法立即数的问题。文字池就是划分出一段地址空间用来存放常量或者地址,需要时用基址+变址的方式去取数据,这样就不用受到合法立即数的限制,可以表示32bit的数据。例如:
汇编源代码:
_start:
ldr r0, =0x11111111
经过反汇编:
00000000 <_start>:
0: e59f009c ldr r0, [pc, #156] ; a4 <delay_loop+0x10>
·
·
·
98: e1520003 cmp r2, r3
9c: 1afffffc bne 94 <delay_loop>
a0: e1a0f00e mov pc, lr
a4: 11111111 tstne r1, r1, lsl r1
分析:
通过反汇编可以看到,ldr伪指令被一条寄存器基址变址指令给替代了。其中以pc为基址,偏移156个字节(16进制是0x9c)。这条指令的作用是将内存地址"pc + 156"开头的4个字节读取到r0中,此时pc的值等于当前执行指令的地址+8(因为流水线的原因),因此pc + 156 = 0xa4,而0xa4地址处存的值刚好是0x11111111。这样就完成了将0x11111111加载到r0。

补充1:

RAM处理器存在流水线,目前已经有十几级流水线,但是ARM为了兼容,无论Soc有多少级流水线,PC的值都是等于当前指令地址 + 8。PC = 当前指令地址 + 8, 记住就行。

补充2:

汇编语言ldr伪指令

伪指令是用来自动拆分代码值的,会把一条语句拆分成多条语句。

示例:



.text
.global _start

_start:
    ldr r1, =0x56000050
    ldr r0, =0x100  
    str r0, [r1]

    ldr r1, =0x56000054
    ldr r0, =0 
    str r0, [r1]

halt:
    b halt

ldr r1, =0x56000054就是一条伪指令,假设我们想把56000054值给r1寄存器,可以用 mov r1, #56000050 ,
但是长度超出了mov 能接收的长度,就要分为高低字节去发送,但是在某些时候我们还要去看开放文档,才能知道
或者没有开发文档,那就让伪指令自己去判断。

到此这篇关于汇编语言LDR指令和LDR伪指令详解的文章就介绍到这了,更多相关汇编语言ldr伪指令内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 汇编语言LDR指令和LDR伪指令详解

本文链接: https://www.lsjlt.com/news/178306.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 汇编语言LDR指令和LDR伪指令详解
    目录LDR指令和LDR伪指令详解ARM32位指令的构成ldr指令和ldr伪指令的使用区别:补充1:补充2:汇编语言ldr伪指令LDR指令和LDR伪指令详解 ARM32位指令的构成 A...
    99+
    2023-01-28
    ldr指令和ldr伪指令 汇编语言ldr伪指令 汇编语言ldr指令
  • 详解汇编语言MOV指令
    MOV(Move)指令是汇编语言中最基本的指令之一,用于将数据从一个位置复制到另一个位置。它的语法形式通常是:MOV dest, s...
    99+
    2023-08-14
    汇编语言
  • 汇编语言指令集学习条件转移指令详解
    目录1.根据单个条件标志的设置情况转移2. 比较两个无符号数,并根据比较的结果转移3. 比较两个带符号数,并根据比较的结果转移4.测试CX或ECX的值为0则转移指令条件转移指令较多,...
    99+
    2022-11-12
  • 汇编语言指令大全 X86和X87汇编指令大全(带注释)
    目录一、数据传输指令1. 通用数据传送指令.2. 输入输出端口传送指令.3. 目的地址传送指令.4. 标志传送指令.二、算术运算指令三、逻辑运算指令四、串指令五、程序转移指令六、伪指...
    99+
    2022-11-12
  • 汇编语言指令集学习CMPXCHG比较并交换操作指令详解
    指令助记符 CMPXCHG 含义: 比较并交换指令 用法:目的操作数和累加操作数(AH、AL、EAX)进行比较,如果相等(ZF=1),则将源操作数复制到目的操作数中,否则将目的操作...
    99+
    2022-11-12
  • 汇编语言入门汇编指令及寄存器详解教程
    目录前言什么是汇编语言汇编语言产生的原因汇编与二进制的关系寄存器寄存器作用存取速度比较寄存器分类常用寄存器用途寄存器EAX、AX、AH、AL的关系汇编语言指令数据传送指令算术运算指令...
    99+
    2022-11-12
  • 详解汇编语言各种指令的解释与用法
    汇编语言是一种低级语言,与计算机硬件直接相关。它使用一系列的指令来表示计算机的操作。下面是一些常见的汇编指令及其解释与用法:1. M...
    99+
    2023-08-17
    汇编语言
  • 汇编语言MIPS指令类型有哪些
    这篇文章主要讲解了“汇编语言MIPS指令类型有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“汇编语言MIPS指令类型有哪些”吧!一、相关概念指令集:一个给定的计算机体系结构所包含的指令集...
    99+
    2023-06-25
  • 汇编语言80x86系统通用数据传送指令详解
    目录通用数据传送指令附上UML Markdown代码:通用数据传送指令 MOV move ...
    99+
    2022-11-12
  • 汇编语言:x86汇编指令大全及其注意事项
    目录Part 1:instructionPart 22.1 (逻辑)运算、移位等常用指令2.1 (逻辑)运算、移位等常用指令2.2 循环移位指令2.3 数据串操作指令2.4 逻辑运算...
    99+
    2022-11-12
  • 汇编语言Debug命令详解教程
    目录1. Debug-R命令2. Debug-D命令 3. Debug-E命令 4. Debug-U命令 5. Debug-T命令6. Debug-A命令参考书籍《汇编语言》——王爽...
    99+
    2022-11-12
  • 汇编语言的指令采用什么来取代二进制
    本篇内容介绍了“汇编语言的指令采用什么来取代二进制”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!汇编语言的指令采用“助记符”来取代二进制。助...
    99+
    2023-06-25
  • 汇编语言MIPS指令分类及寻址模式原理概念
    目录一、相关概念二、MIPS操作数之32个寄存器三、MIPS汇编语言指令类型及寻址方式1. R型指令2. I型指令3. J型指令四、MIPS类型及寻址方式分析1. MIPS字段命名2...
    99+
    2022-11-12
  • 汇编语言80x86系统通用数据传送指令是什么
    这期内容当中小编将会给大家带来有关汇编语言80x86系统通用数据传送指令是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。通用数据传送指令MOVmove传送MOVSXmove with sig...
    99+
    2023-06-25
  • LyScript获取上一条与下一条汇编指令的方法详解
    LyScript 插件默认并没有提供上一条与下一条汇编指令的获取功能,当然你可以使用LyScriptTools工具包直接调用内置命令得到,不过这种方式显然在效率上并不理想,我们需要在...
    99+
    2022-11-11
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作