2017-02-25 375 views
0

如何将数字0xEFFFFFF2加载到ARM中的寄存器中。
这会是什么烂?ARM汇编:MOV指令的基本用法

MVN r0, #2D1 

该指令是否有效?

+0

你有什么试过,你遇到了什么问题?参见例如[this](https://community.arm.com/processors/b/blog/posts/how-to-load-constants-in-assembly-for-arm-architecture)页面。 –

+0

我突出显示了关键字并(希望)改进了问题的清晰度。 – zx485

回答

0

mvn是刚刚将0x2D1反转为0xFFFFFD2E吧?你需要对应的0x1000000D的数字反过来吗? Gnu汇编器编码为0x2D1,2表示向右旋转4,0xD1是旋转的值。你不需要担心,除非你自己制作的机器代码,你不需要把0x2D1汇编语言把你要的号码做这一点

mov r0,#0xEFFFFFF2 

mvn r0,#0x1000000D 

ldr r0,=0xEFFFFFF2 

像GNU汇编汇编器将尝试找到一个单一的指令,将解决MOV在这种情况下,选择MVN R0,#0x1000000D,其他一些汇编器可能不牛逼ry,并简单地告诉你,你的常数对于mov指令不利,迫使你自己去做mvn。或者你可以自己做mvn。对于gnu汇编程序,第三个选项会尝试mov,mvn,如果两者都不能用于那个常量,那么它会将值放在附近并执行pc相对加载(消耗两个.text空间的单词)。