我想写一个简单的操作系统,使用GCC,这将允许我在我输入的显示器上显示文本。我在C中有一个中断表,我需要加载并希望能够使用内联汇编代替外部汇编语言模块。如何使用内联汇编中的LIDT加载中断向量表?
我在寻找的是将指针传递给内联汇编的一种方法。
我试图内联的指令,需要一个存储器操作数是LIDT:
载荷将源操作数的值代入全局描述符表寄存器(GDTR)或中断描述符表寄存器(IDTR) 。源操作数指定包含全局描述符表(GDT)或中断描述符表(IDT)的基址(线性地址)和限制(字节大小)的6字节内存位置。如果操作数大小属性为32位,则将16位限制(6字节数据操作数的低2字节)和32位基址(数据操作数的高4字节)装入寄存器。如果操作数大小属性为16位,则加载16位限制(低2字节)和24位基址(第3,第4和第5字节)。这里,不使用操作数的高位字节,GDTR或IDTR中基地址的高位字节用零填充。
我认为这是处于保护模式,你正在寻找使用'lidt'指令从包含一个6字节的IDT记录(它有基地址和限制)的内存位置加载IDTR? –