大江 发表于 2024-4-26 17:11:41

为什么进入保护模式后,不能调用BIOS例程

我没有搞明白:为什么进入保护模式后,不能调用BIOS例程吗? 请大家帮忙解惑。

cindeequan 发表于 2024-4-26 23:30:04

你说的BIOS例程是指Int X系列?

站长 发表于 2024-4-27 09:46:49

因为BIOS例程都是16位的实模式代码。在保护模式下,别的不说,光是加载段寄存器,就不一样。
mov ds, ax
在bios代码看来,是将ax的内容乘以16。但保护模式看来ax里是段选择子,要用它去描述符表里找对应的段描述符。

大江 发表于 2024-4-27 11:46:17

站长 发表于 2024-4-27 09:46
因为BIOS例程都是16位的实模式代码。在保护模式下,别的不说,光是加载段寄存器,就不一样。
mov ds, ax
在 ...

哦,明白了。谢谢老师

大江 发表于 2024-4-28 09:15:04

老师,我再问一下:即使把BIOS例程的中断调用读取出来,整理成保护模式下的中断描述符,并正确加载IDTR,也会因为BIOS例程是16位代码操作尺寸而无法运行。我这样理解对吗?

站长 发表于 2024-4-28 09:39:33

大江 发表于 2024-4-28 09:15
老师,我再问一下:即使把BIOS例程的中断调用读取出来,整理成保护模式下的中断描述符,并正确加载IDTR,也 ...

是的。这个事情与中断如何处理无关,只与中断处理过程的代码有关。

大江 发表于 2024-4-28 11:14:18

站长 发表于 2024-4-28 09:39
是的。这个事情与中断如何处理无关,只与中断处理过程的代码有关。

好的,谢谢
页: [1]
查看完整版本: 为什么进入保护模式后,不能调用BIOS例程