循环引用和低级汇编

循环引用和低级汇编

问题描述:

我有一个文件叫做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 
+0

只是为了好玩,为什么不告诉我们解决方案? –

两件事情:

  1. idt是什么类型的? (Ans:它是指向idt_entry的指针,或者严格来说是地址idt[0]的名称。)

  2. 如何声明对asm文件中指针的外部引用?

得到这一切的东西,最简单的办法就是编译相应的标志C代码(至少在我的gcc认为的-s),并查看生成的汇编代码。

您没有任何循环引用,您只需使链接器知道您想引用在名为idt的C代码中定义的内存。