我需要加载18h并将其输出到端口60h,以下工作(内部asm(“”))。GCC内联汇编:让编译器决定使用什么寄存器来临时值
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
它创建了多少开销? – osgx
'mov,'不得不创建一个tmp变量,然后在输入块中描述它也是开销。 –
你可以尝试更新的gcc和更高的-O3级别吗? – osgx