路人甲被注册了 发表于 2014-1-4 21:32:19

求助,关于一条汇编指令。


MOV r0, #0x1110
引发错误:A1510: Immediate 0x0000110 cannot be represented by 0-255 and a rotation

应该怎么给R0 赋32位的值?

磊磊映画 发表于 2014-1-4 22:13:57

是不是要分成两个寄存器R0H跟R0L?

eduhf_123 发表于 2014-1-4 22:49:18

请写成如下的伪指令:
LDR R0, =0x1110
或者如下两条指令:
MOV R0, #0x1100
ADD R0, R0, #0x10

详细信息请参考ARM指令系统中关于immed_8的部分。

javenreal 发表于 2014-1-4 22:52:35

3楼是高手!

sinsic@163.com 发表于 2014-1-8 18:52:33

意思是0x0000110不能够被一个8位数和一个4位的循环右移数,表示出来(具体方法查手册)。
采用这个规则,编译器直接将立即数编译到指令中,一条指令就完事了,速度快。
否则,你就要现把你要用的这个值存到内存空间里,用dcd什么的,然后再用数据访问指令,访问。
还有一种懒人方法,就是用“=”,eg.ldr r0,=0x0110 编译器帮你做啦。
页: [1]
查看完整版本: 求助,关于一条汇编指令。