gpt4 book ai didi

avr - 是否可以在内联汇编代码中强制使用特定的寄存器?

转载 作者:行者123 更新时间:2023-12-02 00:29:32 33 4
gpt4 key购买 nike

我有以下汇编代码:

  __asm__ __volatile__ (
"1: subi %0, 1" "\n\t"
"brne 1b"
: "=d" (__count)
: "M" (__count));

这导致以下编译器输出

  ce:   81 50           subi    r24, 0x01   ; 1
d0: f1 f7 brne .-4 ; 0xce <main>
d2: 80 e0 ldi r24, 0x00 ; 0
d4: 90 e0 ldi r25, 0x00 ; 0

我怎样才能实现以下目标:

  ce:   81 50           subi    r16, 0x01   ; 1
d0: f1 f7 brne .-4 ; 0xce <main>
d2: 80 e0 ldi r16, 0x00 ; 0

甚至可以告诉编译器使用 r16 而不是 r24:r25 吗?这样我就可以将 ldi r25,0x00 行使用的循环计数减少 1。

谢谢 jack

最佳答案

这个问题很老,你肯定已经解决了,但出于存档目的,让我回答一下:是的,你可以。像这样声明 __count:

register <type> __count __asm__ ("r16");

瞧!使用 GNU 扩展 explicit register variables ,您已声明 C 变量 __count 应始终放在 r16 中,无论它在哪里使用 - 包括在 ASM 调用之外。

注意这个声明应该有局部作用域,否则编译器会避免在其他函数中使用这个寄存器。

关于avr - 是否可以在内联汇编代码中强制使用特定的寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7590505/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com