作業系統編寫研究心得 1 最初引導篇

2021-04-01 19:54:34 字數 2357 閱讀 9690

晤…… 如果你的開發工具都已經準備好了,那麼我們來開始幹活吧!

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 ...