difference between ldr and ldr.w

寵の児 提交于 2019-12-06 02:47:31

问题


I recently had to debug a MachO binary and I came across the following instruction :-

ldr.w r4, [r1, r0, lsl #2]

I understand that ldr r4, [r1, r0, lsl #2] shifts r0 to the left two times, adds it to r1 and dereferences the result.

How is ldr.w different?


回答1:


.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.




回答2:


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.




回答3:


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).



来源:https://stackoverflow.com/questions/9800526/difference-between-ldr-and-ldr-w

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!