内联asm中的指令SBIW不能为arduino编译(atmega328p)

时间:2016-04-11 23:32:45

标签: assembly arduino inline atmega

在内联汇编中使用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是不错的选择?感谢您的投入!

0 个答案:

没有答案