GCC内联汇编:跳转到块外标签

时间:2009-04-13 14:27:36

标签: c gcc assembly x86

在MSVC下使用内联汇编时,允许通过引用C / C ++代码中的标签跳出汇编块之外,如in this MSDN article所述。

在GCC下使用内联汇编时可以这样做吗?

这是我想要完成的一个例子:

__asm__ __volatile__ (
"   /* assembly code */ "
"   jz external_label;  "
);

/* some C code */

external_label:
/* C code coninues... */

然而,编译器抱怨“external_label”没有被定义。

2 个答案:

答案 0 :(得分:10)

如果使用汇编程序定义标签怎么办?

asm("external_label:");

更新:此代码似乎有效:

#include <stdio.h>

int
main(void)
{
  asm("jmp label");
  puts("You should not see this.");
  asm("label:");

  return 0;
}

答案 1 :(得分:1)

从GCC 4.5开始,您还可以使用asm goto。以下示例跳转到C标签:

.hello =