0

我有一个名为 的文件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
4

1 回答 1

1

需要考虑两点:

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

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

获得所有这些东西的最简单方法是使用适当的标志编译 C 代码(至少在 gcc 中我认为它是 -S)并查看生成的汇编代码。

你没有任何循环引用,你只需要让链接器知道你想要引用 C 代码中定义的内存idt

于 2011-11-27T04:00:35.353 回答