自己動手寫作業系統 編寫引導扇區

2021-06-22 04:23:54 字數 1093 閱讀 7350

計算機電源開啟時,會先進行加點自檢(post),然後尋找啟動盤,如果選擇是從軟盤驅動,計算機就會檢查軟盤的0面0磁軌1扇區,如果它以0xaa55結束,則bios則認為它是乙個引導扇區。這一段**總共為512位元組。

一旦bios發現來引導扇區,就會將這512位元組的內容裝載到記憶體中0000:7c00去,然後跳轉到這個位置將控制權徹底交給這段引導**。

編寫bios

檔名boot.asm

org 07c00h		;告訴編譯器將程式載入到7c00h處	

mov ax,cs ;cs=0的複製過去ax=0,ds=0,es=0

mov ds,ax

mov es,ax

call disptr ;呼叫顯示字串到暫存器

jmp $ ;無限迴圈

disptr:

mov ax,bootmessage ;將bootmessage的位址傳給ax

mov bp,ax ;再傳給bp

mov cx,16 ;因為要用到int10h中斷,要先給各種暫存器賦值,cx表示顯示字串的長度

mov ax,01301h ;ah=13在teletype模式下顯示字串,al=01h表示只顯示字串

mov bx,000ch ;bh表示頁號,bl=0ch表示顯示屬性高亮

mov dl,0 ;dh、dl表示顯示的行、列

int 10h ;bios 中斷顯示

retbootmessage: db "hello os world!"

times 510-($-$$) db 0 ;填充剩下的空間,使生成的二進位制**恰好為512位元組,$表示當前行,$$表示乙個節的開始位址

dw 0xaa55 ;結束標誌,bios識別引導扇區的標誌

編譯命令:

nasm編譯檔案

nasm boot.asm -o boot.bin

bximage 建立乙個軟盤

dd=if=boot.bin of=a.img bs=512 count=1 conv=notrunc

啟動qemu虛擬機器

bochs -f bochsrc

自己動手寫作業系統

virtual pc 5.2 下 dos7.1 中 執行.com檔案相關問題 2009 09 09 12 55 剛才在進入dos後,編譯.asm檔案獲得.com檔案,但系統會出現 emm386 unrecoverable privileged operation error n9.press ent...

自己動手寫作業系統

今天看了前兩章,現將重點記錄如下 作業系統的啟動,關鍵點時同bios的介面 這裡有兩個位址很重要,a,0x7c00 510 0x7dfe登記標誌位 兩個byte 0xaa55 b,0x7c00,作業系統載入的目標位址 系統啟動過程 1 bios清零cpu現場 傳送reset訊號 2 cpu從0xf ...

自己動手寫作業系統

2 自己動手寫作業系統 3自己動手寫作業系統 如何呼叫bios中斷 在一般的程式語言中,函式的呼叫是一件非常容易的事情。比如在c語言中,如果有乙個名為display的程式,它帶有兩個引數,其中引數 noofchar表示顯示的字元數,引數attr表示顯示字元的屬性。那麼要呼叫它,只需給出程式的名稱即可...