求助,关于一条汇编指令。
MOV r0, #0x1110
引发错误:A1510: Immediate 0x0000110 cannot be represented by 0-255 and a rotation
应该怎么给R0 赋32位的值? 是不是要分成两个寄存器R0H跟R0L? 请写成如下的伪指令:
LDR R0, =0x1110
或者如下两条指令:
MOV R0, #0x1100
ADD R0, R0, #0x10
详细信息请参考ARM指令系统中关于immed_8的部分。 3楼是高手! 意思是0x0000110不能够被一个8位数和一个4位的循环右移数,表示出来(具体方法查手册)。
采用这个规则,编译器直接将立即数编译到指令中,一条指令就完事了,速度快。
否则,你就要现把你要用的这个值存到内存空间里,用dcd什么的,然后再用数据访问指令,访问。
还有一种懒人方法,就是用“=”,eg.ldr r0,=0x0110 编译器帮你做啦。
页:
[1]