c-编译程序集时为什么出现奇数操作数错误



学习汇编并阅读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位地址核心。

最新更新