gpt4 book ai didi

c - 是否可以从汇编文件中引用 C 枚举?

转载 作者:太空狗 更新时间:2023-10-29 23:10:37 26 4
gpt4 key购买 nike

系统调用.h

enum Syscall {
OPEN_FILE,
READ_FILE,
CLOSE_FILE
};

系统调用.s

extern WRITE_TO_SCREEN
global write_to_screen
write_to_screen:
mov eax, WRITE_TO_SCREEN
mov ebx, [esp+4]
int 0x80
ret

给我这个错误:

stdlib/syscalls.o: In function `write_to_screen':
stdlib/syscalls.s:(.text+0x1): undefined reference to `WRITE_TO_SCREEN'
make: *** [kernel.elf] Error 1

最佳答案

不,没有。
你可以这样做:

枚举支持.h

#ifdef __ASSEMBLER__
#define ENUM_START
#define ENUM_VALUE(key,value) .equ key,value
#define ENUM_END(typename)
#else
#define ENUM_START typedef enum{
#define ENUM_VALUE(key,value) key=value,
#define ENUM_END(typename)} typename;
#endif

系统调用.h

#include "enum_support.h"

ENUM_START
ENUM_VALUE(OPEN_FILE,0)
ENUM_VALUE(READ_FILE,1)
ENUM_VALUE(CLOSE_FILE,2)
ENUM_END(Syscall)

然后让test.ctest.s包含syscalls.h

gcc -c test.c
gcc -c test.s

不确定它是否有帮助,但我不知道共享枚举的任何其他方式(在汇编中不存在)。
您可以执行 cpp test.ccpp -D__ASSEMBLER__ test.s 来查看发出的代码。

关于c - 是否可以从汇编文件中引用 C 枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56247372/

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