【发布时间】:2017-02-25 05:18:51
【问题描述】:
如何将数字 0xEFFFFFF2 加载到 ARM 中的寄存器。
这将是什么腐烂?
MVN r0, #2D1
这条指令有效吗?
【问题讨论】:
-
您尝试过什么,遇到过什么问题?参见例如 this 页面。
-
我突出显示了关键字并(希望)提高了问题的清晰度。
标签: assembly arm instruction-set
如何将数字 0xEFFFFFF2 加载到 ARM 中的寄存器。
这将是什么腐烂?
MVN r0, #2D1
这条指令有效吗?
【问题讨论】:
标签: assembly arm instruction-set
mvn 只是将 0x2D1 反转为 0xFFFFFD2E 对吗?你需要你想要的数字的倒数,即 0x1000000D 对吗? Gnu 汇编器正在编码 0x2D1 2 表示向右旋转 4 并且 0xD1 是要旋转的值。您无需担心,除非您自己制作机器代码,否则您无需将 0x2D1 放入汇编语言中输入您想要的数字,要么这样做
mov r0,#0xEFFFFFF2
或
mvn r0,#0x1000000D
或
ldr r0,=0xEFFFFFF2
像 gnu assembler 这样的汇编程序将尝试找到一条指令来解决 mov 在这种情况下它选择 mvn r0,#0x1000000D,其他一些汇编程序可能不会尝试并简单地告诉您您的常量不利于 mov 指令强制你自己做mvn。或者你可以自己做 mvn。对于 gnu 汇编器的第三个选择,它将尝试 mov、mvn,如果两者都不适用于该常量,那么它将将该值放在附近并执行 pc 相对加载(消耗两个单词的 .text 空间)。
【讨论】: