汇编指令:MOV与ldr区别

本文介绍了汇编语言中的MOV和LDR指令,讲解了它们在寄存器间数据传递、立即数加载以及地址读取等操作的区别和使用方法。通过实例解析了如何运用这两个指令进行不同类型的内存操作,并探讨了ldr伪指令在处理立即数时的特性。
摘要由CSDN通过智能技术生成

MOV

  • 可以寄存器与寄存器之间传递数据
  • 可以把立即数移动到寄存器中(常数不能超过32位)

LDR

  • 可以地址与寄存器之间的数据传递
  • 也可以常数传递到寄存器中

实例:
1、r1与r2寄存器之间传递就只能用MOV

	MOV r1,r2

2、常数传递到寄存器可以使用MOVldr

	MOV r0,#0
	ldr r0,=0

3、寄存器与地址0X00000000之间传递数据只能用ldr

	ldr r0,=0X30000000
	ldr r0,0X00000000

LDR指令:

	ldr r0, 0x12345678          // 就是把0x12345678这个地址中的值存放到r0中。而mov不能干这个活,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中。
	ldr r0,r1                     //表示把r1寄存器中的值放入r0
	ldr r0,[r1]                  // [r1]表示r1中值对应内存的地址,所以是把r1中的数当作一个地址,把这个地址中的值放入r0.

LDR伪指令:

	ldr r0, =0x12345678`       //例1(立即数):

这样,就把0x12345678这个地址写到r0中了。所以,ldr伪指令和K是比较相似的。只不过mov指令限制了立即数的长度为8位,也就是不能超过512。而ldr伪指令没有这个限制。如果使用ldr伪指令时,后面跟的立即数没有超过8位,那么在实际汇编的时候该ldr伪指令是被转换为mov指令的。

	ldr  r0, =_start //将指定标号的值赋给r0

这里取得的是标号 _start 的绝对地址,这个绝对地址(链接地址)是在链接的时候确定的。它要占用 2 个 32bit的空间,一条是指令,另一条是文字池中存放_start 的绝对地址。

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值