MOV指令的用法是
MOV{S} Rd, <Operand2>
operand2有多种形式,其中的一种就是"imm8m",对应 “ MOV{S}, Rd, #<imm8m>”
而"imm8m"的意思是:
ARM:32 位常数,由 8 位值向右循环移偶数位生成。
Thumb:32 位常数,由 8 位值左移任意位生成
指令替换与补充
以下指令对: ADD 和 SUB, ADC 和 SBC, AND 和BIC, MOV和 MVN, CMP 和 CMN是相似的,除了Op2的取反和移位。
如果一个 #imm8_r 的值不能被表示,ARM编译器会将这个常数取反或移位 。如果变形后的常数可以表示成一个#imm8_r ,
那后面将会自动加上一些补充的指令将原来的数还原出来。
所以会编译成 MVN R0,#0xA0000004