ARM 汇编中对汇编指令被编码成 32bit 的机器码,其间关于当即数寻址的指令,其机器码构成如下:
31 28 | 27 26 25 | 24 21 | 20 | 19 16 | 15 12 | 11 8 | 7 0 |
cond | 0 0 1 | opcode | S | Rn | Rd | rotate_imm | immed_8 |
规则 0~11 位表明 shift operand,表明当即数时, #immediate 由这两部分构成:
immediate = immed_8 >> (rotate_imm*2)
也就是说只要满意上述构成条件的当即数才是合法的操作数,那么以下当即数
0x101,0x102,0xFF1,0xFF04,0xFF003,0xFFFFFFFF,0xF000001F
都是不合法的!!编译器编译的时分会呈现如下正告
error A0092: no immediate rotate operand can be created
看来想完成上面的一个当即数,只能经过好几条指令来完成了!