打印

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

[复制链接]
1336|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者

使用特权

评论回复
5
ayb_ice| | 2013-10-8 09:32 | 只看该作者
LDR R0,=40012400

使用特权

评论回复
6
xinzha| | 2013-10-8 09:46 | 只看该作者
硬性的魔数会带来问题,完全根据当前pc和偏移值算出来加载地址,你也就不用每处这种语句都自己掰手指头算应该到哪个地址取数了。

使用特权

评论回复
7
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.均可编译成功。

使用特权

评论回复
8
bunny0802|  楼主 | 2013-10-8 10:31 | 只看该作者
xinzha 发表于 2013-10-8 09:46
硬性的魔数会带来问题,完全根据当前pc和偏移值算出来加载地址,你也就不用每处这种语句都自己掰手指头算应 ...

 打算在程序中添加或者删减一部分,但由于有PC加偏移地址存在,倘若直接添加或者删减会改变后面的PC当前地址。目前考虑能不能把出现PC加偏移地址的地方都算出来,都改成直接赋地址里面的值,现在纠结于能不能用哪条指令替代。尝试过MOV,ADR

使用特权

评论回复
9
bunny0802|  楼主 | 2013-10-8 10:33 | 只看该作者
ayb_ice 发表于 2013-10-8 09:32
LDR R0,=40012400

伪指令也要有0x的吧?尝试过了,编译没通过。ADR可以可以给很大的值,不知道为什么也不行。

使用特权

评论回复
10
ayb_ice| | 2013-10-8 10:38 | 只看该作者
RT:

未命名.JPG (29.35 KB )

未命名.JPG

使用特权

评论回复
11
ayb_ice| | 2013-10-8 10:39 | 只看该作者
RT:

未命名.JPG (41.33 KB )

未命名.JPG

使用特权

评论回复
12
bunny0802|  楼主 | 2013-10-8 10:50 | 只看该作者
ayb_ice 发表于 2013-10-8 10:39
RT:

非常感谢,不过我尝试了还是有错。奇怪了。能不能加一下QQ:834669020

使用特权

评论回复
13
huangxz| | 2013-10-8 10:58 | 只看该作者
其实你看看指令就知道了,比较明白的理解就是
因为ldr指令也是单周期的,如果可以带32位的立即数的话,那指令本身如果表示呢。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

1

粉丝