LDR 和MOV 指令区别
LDR 和MOV 指令区别
ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。 比如想把数据从内存中某处读取到寄存器中,只能使用ldr 比如: ldr r0, 0x12345678 就是把0x12345678这个地址中的值存放到r0中。 而mov不能干这个活,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中,这个和x86这种CISC架构的芯片区别最大的地方。 x86中没有ldr这种指令,因为x86的mov指令可以将数据从内存中移动到寄存器中。另外还有一个就是ldr伪指令,虽然ldr伪指令和ARM的ldr指令很像,但是作用不太一样。ldr伪指令可以在立即数前加上=,以表示把一个地址写到某寄存器中,比如: ldr r0, =0x12345678 这样,就把0x12345678这个地址写到r0中了。所以,ldr伪指令和mov是比较相似的。只不过mov指令限制了立即数的长度为8位,也就是不能超过512。而ldr伪指令没有这个限制。如果使用ldr伪指令时,后面跟的立即数没有超过8位,那么在实际汇编的时候该ldr伪指令是被转换为mov指令的。ldr伪指令和ldr指令不是一个同东西
----------------------------------------------------------------------------------------------------------
LDR指令的格式:
LDR{条件} 目的寄存器 <存储器地址>
作用:将 存储器地址 所指地址处连续的4个字节(1个字)的数据传送到目的寄存器中。
LDR指令的寻址方式比较灵活,实例如下:
LDR R0,[R1] ;将存储器地址为R1的字数据读入寄存器R0。
LDR R0,[R1,R2] ;将存储器地址为R1+R2的字数据读入寄存器R0。
LDR R0,[R1,#8] ;将存储器地址为R1+8的字数据读入寄存器R0。
LDR R0,[R1],R2 ;将存储器地址为R1的字数据读入寄存器R0,并将R1+R2的值存入R1。
LDR R0,[R1],#8 ;将存储器地址为R1的字数据读入寄存器R0,并将R1+8的值存入R1。
LDR R0,[R1,R2]! ;将存储器地址为R1+R2的字数据读入寄存器R0,并将R1+R2的值存入R1。
LDR R0,[R1,LSL #3] ;将存储器地址为R1*8的字数据读入寄存器R0。
LDR R0,[R1,R2,LSL #2] ;将存储器地址为R1+R2*4的字数据读入寄存器R0。
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。
LDR R0,Label ;Label为程序标号,Label必须是当前指令的-4~4KB范围内。
要注意的是
LDR Rd,[Rn],#0x04 ;这里Rd不允许是R15。
另外LDRB 的指令格式与LDR相似,只不过它是将存储器地址中的8位(1个字节)读到目的寄存器中。
LDRH的指令格式也与LDR相似,它是将内存中的16位(半字)读到目的寄存器中。
LDR R0,=0xff
这里的LDR不是arm指令,而是伪指令。这个时候与MOVE很相似,只不过MOV指令后的立即数是有限制的。这个立即数必须是0X00-OXFF范围内的数经过偶数次右移得到的数,所以MOV用起来比较麻烦,因为有些数不那么容易看出来是否合法。
LDR 和MOV 指令区别相关推荐
- ARM立即数讲解--LDR和MOV的区别 .
Mov 是把立即数赋给一个寄存器,但对立即数的范围有要求.只能是由8bit连续有效位通过偶数次移位能得到的数.如果立即数超出这个范围,就没办法用一条MOV指令给寄存器赋值. LDR除了普通的读数之外, ...
- ARM LDR与MOV的区别
KG-MOV指令.LDR指令.LDR伪指令之间的区别 MOV指令.LDR指令.LDR伪指令之间的区别 作为一个扩展(KG),感觉这个东西还是有必要说说的~~ 在我编译一个工程的时候,用MOV指令编译有 ...
- LEA指令与MOV指令区别
Tips: LEA指令与MOV指令的区别: ① MOV指令是 数据 传送指令-------传送数据 LEA指令是 有效地址 传送指令-------取偏移地址 ② MOV OPRD1 ...
- ATT 汇编 lea 和 mov指令区别
一.mov 指令 mov 8(%rax, %rax, 2), %rbx // rbx = M[3rax + 8] 8(%rax, %rax, 2) 表示内存地址为3rax + 8的内存值 为什么不直接 ...
- LDR伪指令和LDR指令及MOV指令的区别
1.前言 ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令. 2.LDR指令 就是将地址中的值存放到寄存器中 比如想把数据从内存中某处读取到寄存器中 ...
- MOV指令、LDR指令、LDR伪指令之间的区别(ARM立即数的存取)
1.MOV指令 MOV指令可以把立即数或者寄存器内容(注意:这里绝对不可以是内存!!)传递给一个寄存器. 立即数相当于高级语言中的常量(常数), 立即数就是数字嘛,表示数值的数字, 存储器用的是地址, ...
- 2020-12-4((ARM汇编)mov指令,LDR指令,LDR伪指令)
首先说明一下 ARM是RISC("reduced instruction set computer",即"精简指令集计算机")结构 x86是CISC(" ...
- arm汇编指令:ldr和adr的区别
在分析uboot源码时,遇到adr.ldr指令,却分不清这2者的区别,网上很多解释含糊不清,现对adr与ldr指令做解释. 首先给出一段汇编代码: ldr r0, _startadr r0, _sta ...
- ARM LDR和ADR指令
讲的比较好的一篇帖子,ADR和LDR区别的比较清除: LDR和ADR的区别 Load/Store指令 ARM属于RISC指令集,CPU无法对内存的数据进行直接操作,只能通过Load/Store指令来实 ...
最新文章
- ssl握手过程和ca证书验证
- 大学计算机基础 学年教学计划,大学计算机基础教学计划.pdf
- 【攻防世界019】SignIn
- 使用Github(仓库管理)
- Ubuntu 上不了网
- java 解析gson_使用Java和Google GSON解析ESPN API
- 基于Ubuntu使用docker的方式来搭建基于Yolo3+crnn的Chineseocr识别
- mysql临时表的的理解,如何理解存储过程中已存在的mysql临时表?
- easyui datagrid中添加右键菜单事件
- 数据库用户管理(增删改查,即CRUD)
- sqldf包的使用使用-R
- 【程序人生】程序员接私活常用平台汇总
- axios封装全局loading
- JS 创建HTML元素的方法
- 拍牌神器是怎样炼成的(二)--- 键鼠模拟之AutoIt
- 计算机毕业设计Android的手机点名签到学生请假考勤系统(源码+系统+mysql数据库+Lw文档)
- Docker编译安装httpd
- 人脸识别系统毕业设计,人脸识别签到毕业设计,人脸识别打卡毕业设计
- R语言︱SNA-社会关系网络 R语言实现专题(基础篇)(一)
- linux安装Oracle11g详细教程(redhat6、Centos7)