【发布时间】:2017-07-15 08:07:32
【问题描述】:
我编写了一些代码来制作自己的操作系统并学习 x86 汇编语言。在学习 x86 汇编语言时,我开始想知道中断。看下面的汇编代码:
mov ah, 2
mov dl, 'A'
int 0x21
此代码将“A”打印到屏幕上。它适用于 MS-DOS。
mov eax, 1
mov ebx, 0
int 0x80
此代码使程序退出。它适用于 Linux。最后一个:
mov ah, 2
mov al, 1
mov ch, 0
mov cl, 2
mov dh, 0
mov dl, 0
int 0x13
我编写此代码是为了从磁盘复制内核代码。此代码包含在 MBR 扇区中。因此执行此代码时没有操作系统。我有一个问题。
假设有人执行“int”指令来调用中断,如果该“int”指令在 MBR 扇区上执行,它会调用 BIOS 例程。但是我想知道那个'int'指令是否在Linux或Windows上执行,会发生什么?它是指 Linux/Windows 中断向量或 BIOS 例程,与 MBR 扇区的情况相同吗?
坦率地说,我尝试在 Linux 上执行第一个代码时进行了测试,但没有成功。我认为'int'指令的结果取决于操作系统。如果不是真的,有没有人可以告诉我真相或任何想法?
【问题讨论】:
-
如果你读过一点操作系统的实现,你应该知道
int(或其他平台上的其他类似指令)通常被用作调用操作系统特定的一种方式功能。所以不,你不能使用 BIOS 或 DOSint“调用”并在其他任何地方使用它们。 -
是的,INT 取决于它们的设置方式。 BIOS 将它们设置为一种默认方式,操作系统可以根据需要更改它们。更多信息wiki.osdev.org/Interrupts
-
BIOS 中断是实模式代码,直接在 pmode 中执行时不起作用
标签: assembly operating-system bios