【发布时间】:2020-09-19 03:40:58
【问题描述】:
我正在阅读一段内核引导加载程序代码(来自斯坦福的 CS140 Pintos OS):
# Configure serial port so we can report progress without connected VGA.
# See [IntrList] for details.
sub %dx, %dx # Serial port 0.
mov $0xe3, %al # 9600 bps, N-8-1.
# AH is already 0 (Initialize Port).
int $0x14 # Destroys AX.
处理器以实地址模式执行这些指令。推测中断是通过找到中断向量表的第 21 个(索引=0x14)条目并在那里执行处理程序来处理的。根据this source,中断表是由BIOS在实模式下初始化的。 This Wikipedia page 列出了可用的 BIOS 中断,包括上面使用的中断。
我的困惑是因为列出的中断异常编号与Intel reference(第 20-6 页)中对实模式保留中断的描述大相径庭(在this Wikipedia page 中也有重复)
这些中断号是如何消除冲突的?
【问题讨论】:
-
它们没有“消除冲突”。 Intel 为 CPU 使用保留了高达 1Fh 的中断,但 IBM 忽略了这一点,并为其中的大多数分配了其他用途。 Int 0, 1, 3, 6 仅用于与 CPU 相关的含义。特别是int 0Ch "stack fault" 和int 0Dh "general protection fault" 是有问题的,并且在ROM-BIOS 的默认设置中也用于IRQ 硬件中断。如果需要,处理程序必须特别检查它被调用的原因。 Example
-
最后到达的人获胜...
标签: assembly x86 serial-port interrupt bios