difference between ldr and ldr.w

.W is an optional instruction width specifier. It doesn't affect the behaviour of the instruction as such, it just ensures that a 32 bit instruction is generated. See infocenter.arm.com for details:

LDR (pc-relative) in Thumb-2 You can use the .W width specifier to force LDR to generate a 32-bit instruction in Thumb-2 code. LDR.W always generates a 32-bit instruction, even if the target could be reached using a 16-bit LDR. For forward references, LDR without .W always generates a 16-bit instruction in Thumb code, even if that results in failure for a target that could be reached using a 32-bit Thumb-2 LDR instruction.



From the ARM Assembler Manual:

You can use the .W width specifier to force LDR to generate a 32-bit instruction in Thumb-2 code. LDR.W always generates a 32-bit instruction, even if the target could be reached using a 16-bit LDR.

There are ARM and thumb instructions. Some processors have thumb2 extensions to the thumb instructions which good, bad, or otherwise, resemble ARM instructions. Sometimes you may want one and are getting another. Within thumb certainly you can tack on the .w to imply the wider, 32 bit thumb2 instruction instead of the 16 bit thumb instruction. Sometimes the syntax makes it obvious which one you want as the thumb2 instructions are quite restricted compared to ARM and thumb2.

Also note there are different flavors of thumb2, dramatically different between ARMv6 and ARMv7. I think I counted 30-40 ARMv6 thumb2 instructions and over 100 ARMv7 thumb2 instructions. (you will see this if you were using the cortex-m3 and getting used to it and now try to use a cortex-m0).


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值