2010-06-24 56 views
0

我正在嘗試使用BIOS視頻中斷在屏幕上顯示一個字符。 以下是彙編代碼:BIOS視頻服務中斷調用

mov $0x0A, %AH 
mov $0x68, %AL ; to display character 'h' 
int $0x10 

我組裝使用GNU彙編程序產生稱爲sample.o 的對象文件sample.o的總大小是449個字節的代碼。現在我手動寫入這個目標文件的第511和第512個字節位置的十六進制數字0x55和0xAA,以使其可引導。所以我相信現在我有一個512字節的引導扇區。我用QEMU來嘗試從這個目標文件進行引導:

$> qemu -fda sample.o 

的QEMU模擬器啓動,在那裏說了點凍結「從軟盤進行引導......」 但我後認爲檢測的引導扇區bios視頻​​中斷代碼應該運行並在屏幕上顯示一個字符。

我知道我在做可怕的錯誤。也許我錯過了中斷的整個概念。任何人都可以幫忙

編輯:所以我現在使用as86和ld86來產生剛纔的平面二進制文件。而不是在AH 0x0A我使用0x0E,它似乎是它的伎倆。看起來像bios實施問題。

我感謝所有回覆的人。

感謝

回答

3

正常的.o文件包含的不僅僅是所得到的二進制代碼,所以您所做的不起作用並不奇怪(其結果應該大概在10個字節左右)。

你可以爲ld編寫一個腳本讓它產生一個扁平的二進制文件(我似乎記得這應該是可能的,但沒有親自嘗試過)。如果我這樣做,我可能會使用nasm,因爲它可以非常容易地生成原始二進制輸出。另一種可能性是某些舊的MS-DOS彙編程序,它可能會產生格式輸出(也是原始二進制文件,儘管您必須小心,因爲它的加載有點不同)。

+0

好..現在我使用bin86中的as86和ld86工具。如果我使用帶有-d選項的ld86組裝as86後,它會生成只有8個字節的平面二進制文件。 因此,我再次用0x55和0xAA手動寫入第511和512字節。 qemu仍然凍結在「從軟盤啓動...」 – Raja 2010-06-25 01:13:31

+0

現在它的工作..我改變啊爲0x0e – Raja 2010-06-25 01:20:15

0

您需要在BL傳遞屬性值(07H是灰黑色),在BH頁碼和CX計數。

你說你用gas編譯它,它給了你一個448字節的文件?你是組裝成ELF文件還是什麼?我推薦使用BITS 16指令的nasm -f bin。

0

正如Jerry Coffin所說,問題是您的.o文件不是具有適當引導扇區的軟盤映像。除代碼之外,.o文件還包含許多信息,例如符號名稱和重定位信息。

如果您使用的是NASM,請使用-f bin來生成原始二進制文件。如果您使用LD,則可以編寫鏈接器腳本。

對於這種東西的幫助,最好的地方可能是osdev.org及其論壇。