【发布时间】:2011-04-23 08:13:46
【问题描述】:
在我正在进行的 GCC 内联汇编实验中,我遇到了一个关于标签和内联代码的新问题。
考虑以下简单的跳转:
__asm__
(
"jmp out;"
"out:;"
:
:
);
除了跳转到out 标签之外,什么都不做。照原样,这段代码编译得很好。但是如果你把它放在一个函数中,然后用优化标志编译,编译器会报错:“错误:符号'out'已经定义了”。
似乎发生的事情是编译器每次内联函数时都会重复此汇编代码。这会导致标签 out 重复,从而导致多个 out 标签。
那么,我该如何解决这个问题?内联汇编中真的不能使用标签吗?这个tutorial on GCC inline assembly 提到:
因此,您可以将您的程序集 到 CPP 宏和内联 C 功能,所以任何人都可以使用它作为 任何 C 函数/宏。内联函数 非常类似于宏,但 有时更清洁使用。请注意 在所有这些情况下,代码将是 重复,所以只有本地标签( 1: style) 应该定义为 汇编代码。
我试图找到有关这些“本地标签”的更多信息,但似乎找不到与内联汇编相关的任何信息。看起来教程说本地标签是一个数字后跟一个冒号(如1:),所以我尝试使用这样的标签。有趣的是,代码已编译,但在运行时它只是触发了分段错误。嗯……
那么有什么建议、提示、答案...?
【问题讨论】:
标签: c++ c gcc assembly inline-assembly