自己動手寫作業系統

2021-04-30 14:55:14 字數 2335 閱讀 8477

2

自己動手寫作業系統

3自己動手寫作業系統

如何呼叫bios中斷 

在一般的程式語言中,函式的呼叫是一件非常容易的事情。比如在c語言中,如果有乙個名為display的程式,它帶有兩個引數,其中引數 noofchar表示顯示的字元數,引數attr表示顯示字元的屬性。那麼要呼叫它,只需給出程式的名稱即可。對於中斷的呼叫,我們使用的是組合語言中的 int指令。 

比如,在c語言中要顯示一些東西時,使用的指令如下所示: 

display(nofchar,attr); 

而使用bios時,要實現相同功能使用的指令如下: 

int 0x10 

如何傳遞引數 

在呼叫bios中斷之前,我們需要先往暫存器中送一些特定的值。假設要使用bios的中斷13h,該中斷的功能是把資料從軟盤傳送至記憶體之中。在 呼叫該中斷之前,要先指定拷貝資料的段位址,指定驅動器號、磁軌號、扇區號,以及要傳送的扇區數等等。然後,就要往相應的暫存器送入相應的值。在進行下面 的步驟前,讀者有必要對這一點有比較明確地認識。 

此外,乙個比較重要的事實是同乙個中斷往往可以實現各種不同的功能。中斷所實現的確切功能取決於所選擇的功能號,功能號一般都存在ah暫存器之 中。比如中斷13h可以用於讀磁碟、寫磁碟等功能,如果把3送入ah暫存器中,那麼中斷選擇的功能就是寫磁碟;如果把2送入ah暫存器中,選擇的功能則是 讀磁碟等。 

我們要做的事情 

這次我們的源**由兩個組合語言程式和乙個c程式組成。第乙個彙編檔案是引導扇區的**。在引導扇區中,我們寫的**是要把軟盤中第二扇區拷貝至 記憶體段的0x500處(位址是0x5000,即偏移位址為0)。這時我們需要使用bios的中斷13h。這時啟動扇區的**就會把控制權轉移至0x500 處。在第二個彙編檔案中,**會使用bios中斷 10h在螢幕上顯示乙個資訊。c程式實現的功能則是把可執行的檔案1拷貝至啟動扇區,把可執行的檔案2 拷貝至軟盤的第二扇區。 

啟動扇區** 

使用中斷13h,啟動扇區把軟盤第二扇區裡的內容載入至記憶體的0x5000處(段位址為0x500)。下面的**是用於實現這一目的的**,將其儲存至檔案sbect.s中。 

loc1=0x500 

entry start 

start: 

mov ax,#loc1 

mov es,ax 

mov bx,#0 

mov dl,#0 

mov dh,#0 

mov ch,#0 

mov cl,#2 

mov al,#1 

mov ah,#2 

int 0x13 

jmpi 0,#loc1 

上面**第一行類似於乙個巨集。接下去的兩行則是把值0x500載入至es暫存器中,這是軟盤上第二扇區**將拷貝到的地方(第一扇區是啟動扇區)。這時,把段內的偏移設為0。 

接下來把驅動器號送入dl暫存器中,其中磁頭號送入dl暫存器中,磁軌號送入ch暫存器中,扇區號送入cl暫存器中,扇區數送入al暫存器之中。 我們想要實現的功能是把扇區2、磁軌號為0、驅動器號為0的內容送至段位址0x500處。所有這些引數都和1.44mb的軟盤相對應。 

把2送入ah暫存器中,是選擇了由中斷13h提供的相應功能,即實現從軟碟機轉移資料的功能。 

最後呼叫中斷13h,並且轉至偏移為0的段位址0x500處。 

第二個扇區的** 

第二個扇區中的**如下所示(把這些**儲存至檔案sbect2.s之中): 

entry start 

start: 

mov ah,#0x03 

xor bh,bh 

int 0x10 

mov cx,#26 

mov bx,#0x0007 

mov bp,#mymsg 

mov ax,#0x1301 

int 0x10 

loop1: jmp loop1 

mymsg: 

.byte 13,10 

.ascii 「operating system is loading......」 

上面**將被載入至段位址為0x500處,並且被執行。在這段**中,使用了中斷10h來獲取目前的游標位置,然後顯示資訊。 

從第3行到第5行用於得到目前游標的位置,在此中斷10h選用的是功能3。然後,清除了bh暫存器的內容,並把字串送至ch暫存器中。在bx 中,我們送入了頁碼及顯示的屬性。此處,我們想要在黑背景上顯示白色的字元。然後,把要顯示字元的位址送到bp之中,資訊由兩個位元組組成,其值分別為13 的10,它們分別對應回車和lf(換行)的ascⅱ值。接下來是乙個由29個字元組成的串;在下面實現的功能是輸出字串然後移動游標;最後是呼叫中斷, 然後進入迴圈。 

自己動手寫作業系統

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

自己動手寫作業系統 二

上一期,我講述了如何在軟盤的啟動扇區寫一些 然後再從軟盤啟動的過程。製作好乙個啟動扇區,在切換到保護模式之前,我們還應該知道如何使用bios中斷。bios中斷是一些由bios提供的 為了使作業系統的建立更容易的低階程式。在本文中,我們將學習處理bios的中斷。為什麼要用bios bios會把啟動扇區...