我写了一些代码来制作自己的操作系统,并学习x86汇编语言。在研究x86汇编语言时,我开始想知道中断。看下面的汇编代码:Linux与Windows之间'INT'指令的区别
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'(或其他平台上的其他类似指令)通常用作调用OS * specific *功能的方式。所以不,你不能使用BIOS或DOS的'int'“调用”并在其他地方使用它们。 –
是的,INTs取决于它们的设置方式。 BIOS将它们设置为一种默认方式,操作系统会根据需要更改它们。更多信息http://wiki.osdev.org/Interrupts –
BIOS中断是实模式代码,它们在直接在pmode中执行时不起作用 – harold