今天主要介紹我自行製作的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基金會的贊助。
您只需要支持我們,完全不會花到錢!