c – ldr [pc,#value]的奇怪行为
我正在调试一些C代码(ARM平台上的WinCE 6)
我发现一些行为很奇怪: 4277220C mov r3,#0x93,30 42772210 str r3,[sp] 42772214 ldr r3,[pc,#0x69C] 42772218 ldr r2,#0x694] 4277221C mov r1,#0 42772220 ldr r0,#0x688] 线42772214 ldr r3,#0x69C]用于从.DATA部分获取一些常量,至少我认为是这样. 什么是奇怪的是,根据代码r2应该从地址pc = 0x42772214 0x69C = 0x427728B0填充内存,但根据内存内容,它从0x427728B8(8bytes)加载,它也适用于其他ldr用法. 调试器是否出错或者我对ldr / pc的理解? 还有一个问题:我找不到第一个mov命令的语法(任何人都可以指向Thumb(1C2)的optype规范) 对不起,说笑话,但我只是熟悉大会. 解决方法
这是对的.当pc用于读取时,ARM模式下有8位偏移量,Thumb模式下有4位偏移量.
从ARM-ARM:
pc相对寻址有两个原因. >与位置无关的代码,在你的情况下. 我不知道mov r3,30是什么意思.可能是mov r3,rol 30(给出0xC0000024)? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |