将任意一个32位数赋给寄存器(使用LDR伪指令实现)

指令本质是二进制机器码,CPU可以直接执行,伪指令并不是指令,当处理器遇到无法直接执行的指令时,就会将该指令替换成其他指令执行。比如

MOV R1, #0xFFFFFFFF 

MOV 要求传递给寄存器的值必须是一个立即数,0xFFFFFFFF很显然不是一个立即数,处理器是无法直接执行该指令的,所以编译器会事先转化为CPU可以执行的指令。

MOV无法直接将一个32位的数搬移到寄存器中,如果是伪指令就可以做到。

LDR R1, =0x12345678        @ 0x12345678 是要被搬移的数,前面用的是“=”,不是“#”

 其本质是先将 0x12345678 保存到内存中,然后通过LDR指令从内存加载到寄存器。

 

拓展: 除了上述使用方法外,LDR指令还可以将一个标记点的下一条指令的地址保存到寄存器,或者直接将指令保存到寄存器。

LDR R1, =STOP    @ 将标记点STOP的下一条指令的地址保存到寄存器中
LDR R2, STOP     @ 将标记点的下一条指令保存到寄存器中

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值