2019年6月24日 星期一

自製64位元作業系統01──bootloader簡易版

我們這一系列的自製64位元作業系統,主要是為了彌補網路上大多教學文章都是32位元的問題。我們主要利用GNU的工具鏈,再加上QEMU或BOCHS模擬機來進行測試。

今天主要介紹我自行製作的bootloader,這一個組合語言使用AT&T語法,我利用GNU編譯系統來編譯。每一次開機,第一個磁區(只有512Bytes)的資料如果最後是0x55和0xAA,就會被BIOS放進0x7C00的記憶體開始執行。我們這個簡易的bootloader就可以利用0x10號BIOS中斷,在螢幕最左上角印出Hello world!字樣。
.code16
.section .text
# 初始化暫存器
xorw %ax, %ax
xorw %bx, %bx
xorw %cx, %cx
xorw %dx, %dx

movw $0x7c0, %ax
movw %ax, %es
movw %ax, %ds
movw %ax, %ss

# 利用0x10號中斷印出文字
movb $0x0, %al
movb $0x13, %ah
movb $0x7, %bl
movw $12, %cx # 印出12個文字
movw $0x0, %dx
movw $MESSAGE, %bp

int $0x10

Error:
# 無限循環
jmp .

MESSAGE:
.ascii "Hello world!"
# 填充無意義的資料到510Bytes
.org 0x1FE, 0x62
# 最後加上開機磁區必要戳記
.byte 0x55
.byte 0xAA
利用qemu測試的截圖畫面:




👉【幫我們一個忙!】👈

👋如果您喜歡這篇文章,請在下方按5個Like!
 ❤您的支持是我們最大的動力!

您只要登入帳號(Facebook、Google),在下方按5個Like,我們就會收到來自LikeCoin基金會的贊助。
您只需要支持我們,完全不會花到錢!