关于有效立即数的问题,请高手帮忙解答一下

2019-10-15 17:59发布

如题,ARM汇编指令中使用到的立即数是是由一个8位的立即数循环左移偶数位得到,所以并不是每一个立即数都是有效立即数。但是我刚才发现使用如下指令:MOV R0,#0xfffffffe
编译通过,结果正确。我不明白,这个立即数0xfffffffe是如何由“一个8位的立即数循环左移”得到的,还请大家帮忙答疑解惑一下,谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
shikihane
1楼-- · 2019-10-16 13:53
代码上写的,跟实际汇编出来的机器码并不一定是一致的。如果无法用移位得到该立即数,汇编器会帮你开文字池。汇编器会帮你处理了。
teczm
2楼-- · 2019-10-16 15:21
 精彩回答 2  元偷偷看……
teczm
3楼-- · 2019-10-16 18:25
shikihane 发表于 2017-1-9 14:56
代码上写的,跟实际汇编出来的机器码并不一定是一致的。如果无法用移位得到该立即数,汇编器会帮你开文字池 ...

不赞同你的说法,我这个汇编用到的指令是MOV不是LDR,非有效立即数会直接报错的,如果照你这么说非有效立即数就不会报错了,但是实际上并非如此。至于你说的这个文字池处理,我不了解,不知道是否有相关资料可以分享参考一下,谢谢。
teczm
4楼-- · 2019-10-16 19:11
K.O.Carnivist 发表于 2017-1-9 11:03
“MOV R0,#0xfffffffe”会被编译器转成“MVN R0, #0x00000001”吧

修正:应该是汇编器Assembler不是编译 ...

不好意思,我看错了,是你说的这样,之前我看汇编窗口把MVN看成了MOV,还反复检查了好几次,真是尴尬。谢谢了。
teczm
5楼-- · 2019-10-16 19:40
给大家分享一下吧。怪我自己之前没有好好看清楚,的确和楼上说的一样,IDE给处理了一下,最后如图所示变成了MVN。

一周热门 更多>