arm反汇编,能不能摆脱流水线格式,不用PC寻址。求大神指教

[复制链接]
1764|12
 楼主| bunny0802 发表于 2013-10-6 16:37 | 显示全部楼层 |阅读模式
LDR.N           R0,[PC,#0x0158]         ;000058AE 4856      这里PC
+158+2= 5A08 查表得知存放值为  40012400                  
          能不能把程序改成不用PC?
已经验证:MOV.W    R0, #0x40012400     程序会报错。
huangxz 发表于 2013-10-6 23:10 | 显示全部楼层
立即数不能大于255
shampo0 发表于 2013-10-6 23:53 | 显示全部楼层
听起来好难啊
黄小俊 发表于 2013-10-7 12:07 | 显示全部楼层
ayb_ice 发表于 2013-10-8 09:32 | 显示全部楼层
LDR R0,=40012400
xinzha 发表于 2013-10-8 09:46 | 显示全部楼层
硬性的魔数会带来问题,完全根据当前pc和偏移值算出来加载地址,你也就不用每处这种语句都自己掰手指头算应该到哪个地址取数了。
 楼主| bunny0802 发表于 2013-10-8 10:11 | 显示全部楼层
huangxz 发表于 2013-10-6 23:10
立即数不能大于255

MOV Rd, #imm16,该指令要求 ‘imm16’ is any value in the range 0—65535。但在程序中出现MOV R0,#0x20000000,MOV R0,#0x22000000.均可编译成功。
 楼主| bunny0802 发表于 2013-10-8 10:31 | 显示全部楼层
xinzha 发表于 2013-10-8 09:46
硬性的魔数会带来问题,完全根据当前pc和偏移值算出来加载地址,你也就不用每处这种语句都自己掰手指头算应 ...

 打算在程序中添加或者删减一部分,但由于有PC加偏移地址存在,倘若直接添加或者删减会改变后面的PC当前地址。目前考虑能不能把出现PC加偏移地址的地方都算出来,都改成直接赋地址里面的值,现在纠结于能不能用哪条指令替代。尝试过MOV,ADR
 楼主| bunny0802 发表于 2013-10-8 10:33 | 显示全部楼层
ayb_ice 发表于 2013-10-8 09:32
LDR R0,=40012400

伪指令也要有0x的吧?尝试过了,编译没通过。ADR可以可以给很大的值,不知道为什么也不行。
ayb_ice 发表于 2013-10-8 10:38 | 显示全部楼层
RT:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ayb_ice 发表于 2013-10-8 10:39 | 显示全部楼层
RT:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| bunny0802 发表于 2013-10-8 10:50 | 显示全部楼层
ayb_ice 发表于 2013-10-8 10:39
RT:

非常感谢,不过我尝试了还是有错。奇怪了。能不能加一下QQ:834669020
huangxz 发表于 2013-10-8 10:58 | 显示全部楼层
其实你看看指令就知道了,比较明白的理解就是
因为ldr指令也是单周期的,如果可以带32位的立即数的话,那指令本身如果表示呢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部