在内联汇编中使用SBIW(从Word中减去Immediate)时,我偶然发现了一些奇怪的编译错误。我想使用寄存器对来做一些简单的16位算术(只是递增/递减)。我按照指令参考Instruction-set, p. 119使用了页面上显示的代码示例进行内联汇编:
asm volatile(
"ldi r25, 0xff \n"
"ldi r24, 0xff \n"
"sbiw r25:r24,1 \n"
);
此代码段无法编译并抛出错误:寄存器r24,r26,r28 或者需要r30 切换r25和r24,我得到:
asm volatile(
"ldi r25, 0xff \n"
"ldi r24, 0xff \n"
"sbiw r24:r25, 1 \n"
);
仍未编译错误`,'必需,导致:
asm volatile(
"ldi r25, 0xff \n"
"ldi r24, 0xff \n"
"sbiw r24, 1 \n"
);
正在编译而没有错误。我在这里监督什么?可能会补充一点,我不是那么多用asm,所以也许我的文档错了。
旁注:对于简单的16位算术,sbiw / adiw是不错的选择?感谢您的投入!