环境:ADS1.2
芯片:S3C2440A
在ARM裸机编程时,我在程序中使用了下面这个语句:
MOV R2, #0xFC0C
编译时出现错误:immediate out of range for this operation
这是在 ARM 状态下:
在范围 0x0
-0xFF
(0-255)
内,MOV
可加载任何
8 位常数值。超出了这个范围就会出问题
该指令还可以将这些值循环移动任何偶数位。在许多数据处理操作中,这些值也可用作立即操作数,而无需用单独的指令加载。MVN
可加载这些值的按位补码。
这些补码数值为 -(
,其中 n
+1)
是 n
MOV
中给出的值。在
ARMv6T2 及更高版本中,MOV
可以在 0x0-0xFFFF
(0-65535)
范围内加载任何 16 位数字。
超出了这个范围可以用LDR命令加载