ARM的MOV命令的格式如下
op2占据12个比特,其中bit11-bit8为移位数目(rotate ),且bit7-0为8个比特的即时数目(imm )、MOV Rn、op2,且在执行之后,rn=op2 ),其中rotate
0x56000000是32位的数,但可以找到这样的8位即时数。 通过向右移动得到。 查看机器码e3a03456,展开为二进制,并对照以下格式
1110 0011 1010 0000 0011 0100 0101 0110
cond[31:28]=1110
[27:26]=00
L[25]=1表示op2是即时数
OpCode[24:21]=1101
S[20]=0
Rn[19:16]=0000
Rd[15:12]=0011,R3
Op2[11:8]=0100,向右移动4 * 2位
op2 [ 7:0 ]=0101 0110,8,8位即时数,0x56
首先,将0x56扩展为32位无符号数,0x00000056,然后循环向右移动8位,即可得到0x56000000
2、mov r3,#0x56000014
0x56000014不能通过轮班获得。 在这种情况下,编译器会报告错误。 用c语言编写的程序,编译器会这样处理。
mov r3,#0x56000000
add r3,r3,#0x14
另一个替代mov的指令是ldr,可能会更方便。