gpt4 book ai didi

c - GCC 内联程序集 : Jump to label outside block

转载 作者:太空狗 更新时间:2023-10-29 16:48:33 24 4
gpt4 key购买 nike

在 MSVC 下使用内联汇编时,可以通过引用 C/C++ 代码中的标签跳到汇编 block 之外,如 in this MSDN article 所述。 .

在GCC下使用内联汇编能做到这样吗?

这是我要完成的示例:

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

/* some C code */

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

然而,编译器提示“external_label”没有被定义。

最佳答案

这个答案中的代码恰好可以工作,但它是未定义的行为,并且通常会在启用优化的情况下破坏事物。只有使用 asm gotounder limited circumstances 跳出内联 asm 语句才是安全的当 asm 语句后跟 __builtin_unreachable();

(这在这里不可用:跳入 内联 asm 语句的中间,然后在函数内部再次跳入编译器生成的代码是不安全的。)


如果用汇编器定义标签会怎样?

asm("external_label:");

更新:这段代码似乎有效:

#include <stdio.h>

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

return 0;
}

关于c - GCC 内联程序集 : Jump to label outside block,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/744055/

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