計算機電源開啟時,會先進行加點自檢(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表示顯示字元的屬性。那麼要呼叫它,只需給出程式的名稱即可...