循环引用和低级汇编
问题描述:
我有一个文件叫做idt.c
,在这个文件中,我需要从汇编中调用函数idt_load
。现在,这将工作得很好,除了我需要访问变量,idtp
从程序集文件,变量声明在idt.c循环引用和低级汇编
这不会工作,因为链接器会告诉我,要么idt_load未定义或idtp未定义。我怎样才能使这个工作?
idt.c的相关部分
struct idt_entry
{
unsigned short base_lo;
unsigned short sel;
unsigned char always0;
unsigned char flags;
unsigned short base_hi;
} __attribute__((packed));
struct idt_ptr
{
unsigned short limit;
unsigned int base;
} __attribute__((packed));
struct idt_entry idt[256];
struct idt_ptr idtp;
extern void idt_load();
//Later in the code...
idt_load();
idt.asm想出
global idt_load
extern idtp
idt_load:
lidt [idtp]
ret
答
两件事情:
idt
是什么类型的? (Ans:它是指向idt_entry
的指针,或者严格来说是地址idt[0]
的名称。)如何声明对asm文件中指针的外部引用?
得到这一切的东西,最简单的办法就是编译相应的标志C代码(至少在我的gcc认为它的-s),并查看生成的汇编代码。
您没有任何循环引用,您只需使链接器知道您想引用在名为idt
的C代码中定义的内存。
只是为了好玩,为什么不告诉我们解决方案? –