学习汇编并阅读msp430上的BIT指令。当试图编译此代码时:
int main (void)
{
while(1){
__asm__("BIT R2, 3");
}
return 0;
}
上面写着:error: odd operand: -3
然而,当编写__asm__("BIT.B R2, 3");
时,它是有效的。
有人能解释一下吗?
指令BIT R2, 3
对目标地址(即程序计数器的偏移量(使用符号模式。如果要使用立即值3
,则必须使用BIT R2, #3
。
BIT
而不是BIT.B
失败的原因是BIT
执行字运算,并且您使用的是非法的奇数地址。字操作必须在MSP430中进行字对齐(即偶数地址(。字节操作可以操作任何字节地址,奇数或偶数。
如果您阅读正在使用的MCU系列的《用户指南》,您可以获得相当详细的信息。例如,对于MSP430x2xxx系列,您可以阅读https://www.ti.com/lit/ug/slau144j/slau144j.pdf文档,第3章或第4章,具体取决于您的MCU是否具有更新的20位地址核心。