我寫了一些代碼來製作自己的操作系統,並學習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