是否可以从程序集文件引用C枚举?
syscalls.h是否可以从程序集文件引用C枚举?,c,enums,nasm,header-files,C,Enums,Nasm,Header Files,syscalls.h enum Syscall { OPEN_FILE, READ_FILE, CLOSE_FILE }; syscalls.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 `wri
enum Syscall {
OPEN_FILE,
READ_FILE,
CLOSE_FILE
};
syscalls.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
不,没有。您可以这样做:
enum_support.h syscalls.h 然后让
test.c
和test.s
包含syscalls.h
gcc-c test.c
gcc-c测试.s
我不确定这是否很有用,但我不知道有什么其他方法可以共享枚举(在汇编中不存在)。您可以执行
cpp test.c
或cpp-D\u汇编程序\uuuu test.s
来查看发出的代码
#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
#include "enum_support.h"
ENUM_START
ENUM_VALUE(OPEN_FILE,0)
ENUM_VALUE(READ_FILE,1)
ENUM_VALUE(CLOSE_FILE,2)
ENUM_END(Syscall)