我需要加载 18h 并将其输出到端口 60h,以下工作(在 asm("") 内)。
ldi r1, 0x18 ; 0x18 -> r1
sts 0x60, r1 ; output r1 -> 0x60
我不在乎寄存器 r1 或任何其他是否用于此目的。有没有一种简单的方法让编译器决定使用哪个寄存器?
我可以使用外部 r/w 变量,但它会产生一些不必要的开销:
register uint8_t tmp;
asm volatile (
"ldi %[tmp], 0x18 \n\t"
"sts 0x60, %[tmp]"
: [tmp] "=r"(tmp) :);
这适用于 AVR atmega(8 位)处理器。使用 GCC 4.3.2