gpt4 book ai didi

编译包含包含 C 定义的头文件的汇编代码

转载 作者:太空宇宙 更新时间:2023-11-04 07:36:42 24 4
gpt4 key购买 nike

我正在尝试一起编译汇编和 C 代码(不是 C 到汇编),但无法完成。

例如:

文件common.h

#ifndef __COMMON_H__
#define __COMMON_H__

struct tree{
tree* left;
tree* right;

void* elem;
};

void foo(int c);
#endif

文件common.S

#include "common.h"

.text
.globl foo
.ent foo
foo:
//foo implementation

.end foo

当我尝试编译时:

# gcc -c common.S
common.h: Assembler messages:
common.h:5: Error: unrecognized opcode `struct tree{'
common.h:7: Error: unrecognized opcode `tree* left'
common.h:8: Error: unrecognized opcode `tree* right'
common.h:10: Error: unrecognized opcode `void* elem'
common.h:12: Error: junk at end of line, first unrecognized character is `}'
common.h:14: Error: unrecognized opcode `void foo(int c)'

有什么方法可以使用 gcc 将 C 语言定义转换为汇编语言吗?

最佳答案

不,您不能在汇编语言中包含 C 声明。汇编程序不知道 struct tree 是什么意思。

如果你想写一个汇编语言函数 foo 来使用你定义的 struct tree,你将不得不在不使用C 头文件。

要了解这可能是什么样子,请用 C 语言编写 foo 函数,使用 gcc -S 编译它以生成汇编列表,然后执行查看生成的编译器生成的 common.s 文件。 (您应该在单独的目录中执行此操作,以免破坏现有的 common.s 文件。)

您可能不会看到任何对 struct tree 或成员名称 leftrightelem< 的引用;相反,您会看到引用特定偏移量数据的汇编操作码。

关于编译包含包含 C 定义的头文件的汇编代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8251463/

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