gpt4 book ai didi

gcc - 相当于 GCC 的裸属性

转载 作者:行者123 更新时间:2023-12-04 02:50:48 43 4
gpt4 key购买 nike

我有一个用纯 C 编写的应用程序,混合了一些包含纯 ASM 的函数。 Naked 属性不适用于 x86(为什么?为什么?!)并且我的 asm 函数不喜欢 prologue 和 epilogue 弄乱堆栈。是否有可能创建一个可以从 C 代码部分引用的纯汇编函数?我只需要这种 ASM 函数的地址。

最佳答案

只需使用 asm()在功能块之外。 asm()的论据被编译器简单地忽略并直接传递给汇编器。对于复杂的函数,单独的汇编源文件是避免笨拙语法的更好选择。

例子:

#include <stdio.h>

asm("_one: \n\
movl $1,%eax \n\
ret \n\
");

int one();

int main() {
printf("result: %d\n", one());
return 0;
}

PS:请确保您了解您平台的调用约定。很多时候你不能只是复制/过去汇编代码。

PPS:如果您关心性能,请使用 extended asm反而。扩展 asm 本质上是将汇编代码内联到您的 C/C++ 代码中,并且速度更快,尤其是对于短汇编函数。对于较大的汇编函数,最好使用单独的汇编源文件,因此对于需要指向小型汇编函数的函数指针的极少数情况,此答案确实是一种技巧。

关于gcc - 相当于 GCC 的裸属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8374449/

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