Error: invalid constant after fixup

用arm-linux-gcc编译的时候碰到了这个错误:
led_on.S:5: Error: invalid constant (111400) after fixup
网上搜了一下,有如下解释:
mov R1, #0xf0f0f021 最好改成LDR R1,=0xf0f0f021 用mov的话只要立即数大于0x100后有些数可以编译通过但是有些数就不能编译通过 

从上面的解释可以看出,立即数只能表示8位,超过了8位就有问题了。如果超过了8位,可以用ldr指令,也可以用C语言定义变量(需用上面的立即数初始化),然后传进嵌入的汇编程序。


8位位图:

定义:
一个常数可由一个8位的常数循环右移偶数位得到, 我们称这个常数符合8位位图。
例子:
常数0x5A000000可由0x5A循环右移8位得到,符合。
常数0x00000101不可由一个8位的常数循环右移偶数位得到,因此不符合8位位图。

判断一个数是否符合8位位图的原则:
1、这个数的二进制表示中1的个数n不超过8个。
2、这n个1(n<=8)能同时放到8个二进制位中。
3、8个二进制位循环右移偶数位得到我们这个数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值