ARM指令中LDR与MOV的区别与应用——看这一篇就够了

ARM指令中LDR与MOV的区别与应用——看这一篇就够了ARM指令中LDR与MOV的区别与应用、从内存中寻址的方法、LDR伪指令和MOV指令的异同

大家好,又见面了,我是你们的朋友全栈君。

ARM指令中LDR与MOV的区别与应用——看这一篇就够了  作者简介:大家好我是IM汤姆凯特,大家可以叫我汤姆
ARM指令中LDR与MOV的区别与应用——看这一篇就够了 个人主页:IM汤姆凯特的CSDN博客
ARM指令中LDR与MOV的区别与应用——看这一篇就够了 系列专栏:【ARM嵌入式基础】
ARM指令中LDR与MOV的区别与应用——看这一篇就够了 每日一句:总有一天,你坚持的东西,会返过来拥抱你


我们知道LDR和MOV都是用来传递数据的指令,什么时候用LDR什么时候用MOV呢?

?想要掌握LDR指令和MOV指令的用法,我们可以先了解一下ARM和x86的区别

ARM采用的是RISC(精简指令计算机),x86架构采用的是CISC(复杂指令计算机)CISC架构采用庞大的指令集,可以减少编程所需要的代码行数,减轻程序员的负担,RISC采用精简指令集,包含了简单、基本的指令,通过这些简单、基本的指令,就可以组合成复杂指令,二者各有优缺点。CISC在桌面计算机和服务器中应用广泛,而RISC在嵌入式微处理器中则占有较大的市场份额。ARM系列的芯片全部基于RISC技术。

我们现在使用的计算机大部分都是冯·诺依曼结构,而ARM9系列之后基本都是用的哈佛结构,如图

ARM指令中LDR与MOV的区别与应用——看这一篇就够了

 ARM结构是将程序指令存储器和数据存储器分开的,x86是合并在一起的存储结构

?了解完硬件的设计架构就能明白为什么LDR指令在x86汇编中是不存在的,因为x86中程序指令存储器和数据存储器是在一块的直接用mov就可以从内存传递数据,而ARM必须通过LDR才能内存中读取数据。


一、讲解LDR指令并举例:

LDR指令

1.可以把内存中32位的字数据传送到寄存器中

2.也可以通过间接寻址的方式某寄存器的值传递到目的寄存器中

LDR伪指令

1.有等号“=”就是伪指令

2.等号后面如果是值直接将值传递给寄存器,如果是定义的别名,则是把别名对应的地址传递到寄存器

常用于从内存中读取数据到寄存器,两种方法:

  • ARM指令中LDR与MOV的区别与应用——看这一篇就够了1.把0x400000地址中的值读入到r0
LDR r0,0x400000  
  • ARM指令中LDR与MOV的区别与应用——看这一篇就够了2.通过LDR伪指令把a对应的地址存到r1,然后将以r1的值为地址的内存中的数据传递到r0中
LDR r1,= a
LDR r0,[r1]

二、讲解MOV指令并分析与LDR的区别

MOV指令

1.用于寄存器和寄存器之间传递数据

2.把立即数(立即数表示数值的数字,前面加#)传递给寄存器

  • ARM指令中LDR与MOV的区别与应用——看这一篇就够了将r2的内容传给r1
MOV r1,r2
  • ARM指令中LDR与MOV的区别与应用——看这一篇就够了将6传递给r1
MOV r1,#6

LDR伪指令和MOV指令的异同

都可以传递立即数,但是MOV的立即数长度限制为8位,也就是不能超过512,LDR伪指令却没有限制。

  • ARM指令中LDR与MOV的区别与应用——看这一篇就够了 都可以赋值“0”
LDR r1,=0
MOV r1,#0

可是MOV超过512就会出错

ARM指令中LDR与MOV的区别与应用——看这一篇就够了

 当它用LDR伪指令时就没有问题

ARM指令中LDR与MOV的区别与应用——看这一篇就够了

 其实LDR伪指令在赋值小于512的立即数时就是用的MOV指令,超出512后就会变成两条指令,或从偏移地址中读取一个32位的数据给寄存器。


总结

1.从内存中读取数据常用的有两种方法

        1)LDR和地址直接读取

        2)LDR伪指令读取

2.寄存器之间数据的传递

        1)用MOV指令

3.立即数赋值两种方法

        1)MOV # 但是有长度限制

        2)LDR = 没有长度限制


本期就结束了,如果对您有帮助,点赞+评论支持一下博主再走吧

还没有关注汤姆的朋友,点个关注每天学一点汇编

ARM指令中LDR与MOV的区别与应用——看这一篇就够了

下期预告:测试ARM堆栈的类型

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149986.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Wannacry(永恒之蓝)病毒「建议收藏」

    Wannacry(永恒之蓝)病毒「建议收藏」一、Wannacry(永恒之蓝)病毒2017.04-051)一种“蠕虫式”的勒索病毒软件,大小3.3MB,勒索病毒肆虐。2)由不法分子利用NSA(美国国家安全局)泄露的危险漏洞“EternalBlue”(永恒之蓝)进行传播。3)中国部分Windows操作系统用户遭受感染,校园网用户首当其冲,受害严重,大量实验室数据和毕业设计被锁定加密。部分大型企业的应用系统和数据库文件被加密后,无法正常工作,影响巨大。4)文件被加密,要求支付高比特币。5)比特币:比特币是一种P2P形式的虚拟的加密数字货币

    2022年10月17日
    0
  • python怎么表示取余_python如何实现取余操作

    python怎么表示取余_python如何实现取余操作python实现取余操作的方法:可以利用求模运算符(%)来实现。求模运算符可以将两个数相除得到其余数。我们还可以使用divmod()函数来实现取余操作,具体方法如:【divmod(10,3)】。在python中要实现取余操作可以使用求模运算符(%),该运算符可以将两个数相除得到其余数。(推荐教程:Python入门教程)如果一个数恰好能被另外一个数据整除,则余数为0,%运算后返回结果为0。可利用余数…

    2022年4月25日
    108
  • python进阶(22)pydantic–数据类型校验

    python进阶(22)pydantic–数据类型校验pydantic库的作用pydantic库是一种常用的用于数据接口schema定义与检查的库。Pydantic在运行时强制执行类型提示,并在数据无效时提供用户友好的错误信息。pydantic安

    2022年7月29日
    17
  • TCP/ip详解_TCP/IP详解

    TCP/ip详解_TCP/IP详解  TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别。就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样。计算机使用者意识到,计算机只是单兵作战并不会发挥太大的作用。只有把它们联合起来,电脑才会发挥出它最大的潜力。…

    2025年7月4日
    0
  • 进化算法_差分进化算法图解

    进化算法_差分进化算法图解神经进化正在复兴。主要的人工智能实验室和研究人员正在试验它,一丝新的成功点燃了更多的热情,能对于深度学习产生影响的新机遇正在出现。也许你在深度学习所有的激动人心的时刻并没有听到过神经进化,但它只是潜行

    2022年8月2日
    6
  • 程序员真是太太太太太有趣了

    程序员真是太太太太太有趣了点击上方“程序员小明”,选择“星标”今晚可以不加班!网络上虽然已经有了很多关于程序员的话题,但大部分人对这个群体还是很陌生。我们在谈论程序员的时候,究竟该聊些什么呢?各位…

    2022年6月14日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号