繁体   English   中英

循环引用和低级汇编

[英]Circular References and Low Level Assembly

我有一个名为idt.c的文件,在这个文件中,我需要从程序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

需要考虑的两件事:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM