晤…… 如果你的開發工具都已經準備好了,那麼我們來開始幹活吧!
ia-32體系下的 i386 及以後的處理器,為了同當年的8086相相容,在系統啟動的時候都是將處理器置於實模式。這個時候你可以將系統看做是 "高速的8086" 因此這決定了我們啟動部分的**,是必須用16bit**去編寫的。 ibm pc在引導的時候,是從有效引導裝置的第0磁頭0面1扇區開始的,bios讀取這個扇區的所有資料,並將它們載入到0x0:0x7c00位址處,然後bios會跳到這個位址,開始執行這個扇區的內容,也就是開始引導pc了。
基於以上2點,我給出如下的**:
; myos ver 0.0 boot.a**
; play!zone 2002-2005 kakashi.r
;
; 從磁碟上載入0磁軌 0磁頭 第2扇區的 detect檢測程式並跳轉執行.;;
;;;;
.8086
.model **all
.code ;一些程式中使用的常量的定義
init_seg = 07c0h
init_stack = init_seg
run_seg = 9000h
core_seg = 9020h
0 .startup
entry:
mov ax, init_seg
mov ds, ax
mov cx, 256
mov ax, run_seg
mov es, ax
mov si, 0
mov di, 0
rep movsw ;移動7c00:0的**到90000:0處並跳轉過去執行
mov ax, init_stack
mov ss, ax
mov sp, 0200h
mov ax, run_seg
mov bx, offset start
push ax
push bx
retf
start: ;以下部分使用的是int10h 不熟悉的話參考bios手冊
displaytext:
mov ax, cs
mov ds, ax
mov si, offset msg
sub cx, cx
showtext: ;迴圈顯示字串
mov al,[si]
inc si
inc cx
mov ah, 0eh
mov bx, 0007h
int 10h
cmp cx, 1dh
jle showtext
load_kernel: ; 下面的部分使用的是int13中斷,不熟悉的話請參考bios中斷手冊。
mov ax, core_seg
mov es, ax
mov bx, 0
mov cl, 2
mov ch, 0
mov al, 2 ;讀取1個扇區
mov dx, 0
mov ah, 2
int 13h
cmp ah, 0
jne load_kernel ;讀取失敗,死迴圈
mov ax, core_seg
mov bx, 0
push ax
push bx
retf ;成功則跳到90200:0開始執行
data:
200h-21h
msg db "loading kaka's opeart system",0dh,0ah
01feh
boot dw 0aa55h ;啟動扇區正常結束標誌
end這段**使用ma**611編譯連線,並使用exe2bin工具轉換。總長度為512位元組,其中最後的2個位元組 0xaa 0x55 是有效引導扇區的標誌位元組。bios通過這2個位元組來判斷是否是有效引導扇區。
**的作用很簡單,在螢幕上顯示一行loading kaka's opeart system 然後將載入引導裝置上的0頭0面2扇區的資料到 0x90200:0,載入成功的話則會跳到這個位置去執行。這樣就完成了最初期的引導工作,0x90200:0處的**會接著完成其他的工作。至於0x90200:0處的程式就是是什麼,這個可以按你的要求去做。我自己的則是將處理器設定為保護模式,下次放出給大家看。
大家在用bochs除錯的時候,推薦使用軟盤進行引導,使用uedit將編譯好的**,儲存到軟盤映象檔案的前512個位元組上就可以了。注意不要寫錯了位置啊 - -b 然後啟動bochs開始看你寫的啟動**是如何一句一句執行的吧!
作業系統編寫研究心得 0 工具篇
我想不少人在讀這篇文章的時候,一定是用的m 的windows。這沒什麼不好意思的,我自己也在用。那麼就先來說說在m 的環境下的開發環境搭建。以windows2000 professonl sp4 it s rollup 為準。一共需要這麼幾個開發工具 ma 6.11,djgpp 2.0 editpl...
自己動手寫作業系統 編寫引導扇區
計算機電源開啟時,會先進行加點自檢 post 然後尋找啟動盤,如果選擇是從軟盤驅動,計算機就會檢查軟盤的0面0磁軌1扇區,如果它以0xaa55結束,則bios則認為它是乙個引導扇區。這一段 總共為512位元組。一旦bios發現來引導扇區,就會將這512位元組的內容裝載到記憶體中0000 7c00去,...
作業系統編寫筆記
說明 將當前資料夾下的pm.img軟盤映像掛載到 mnt floppy目錄,並將test.com檔案複製到軟盤映像,然後解除安裝映像。1 sudo mkdir mnt floppy 2sudo mount o loop pm img mnt floppy 3sudo cp test com mnt ...