實現一個操作系統-工作環境及一個最小“操作系統”(windows下)

參考書籍:
《一個操作系統的實現》
《x86彙編語言 從實模式到保護模式》

隨便說說:在一開始粗略瀏覽了《一個操作系統的實現》前2章之後,發現怎麼無論在哪個環境下(windows和linux)都需要用到linux,而我現在基本都是用windows,無論裝雙系統還是虛擬機來運行linux都有點麻煩(不太熟悉linux)。。。後面在看完《x86彙編語言~》之後,發現在windows下即可完成所有工作。

環境:

操作系統:windows7

彙編編譯器:nasm

虛擬硬盤或虛擬軟盤製造工具:bochs/virtual box/win7(win7自身可以製造虛擬硬盤)
P.S.《一個操作系統的實現》書中用的是(虛擬)軟盤啓動,實則用虛擬硬盤也可以,個人感覺更方便。。。

硬盤(軟盤)讀寫工具:winhex
P.S.虛擬/物理的均可讀寫。。。

查看二進制的工具:binary viewer
P.S.也可以用winhex查看

系統運行工具:virtual box

系統調試工具:bochs

最小”操作系統“

其實說與其這個是最小“操作系統”,還不如說它就是個類似hello world的小程序,只不過這個小程序使用匯編小的,並且不是通過操作系統打開的。。。

代碼:

    mov ax,0xb872            ;顯示緩衝區
    mov es,ax
    mov di,0

    mov ax,0                 ;字符串
    mov ds,ax
    mov si,str + 0x7c00      ;偏移地址

    mov bh,7
@l1:    
    mov ah,[ds:si]
    cmp ah,'#'
    je @end
    mov [es:di],ah
    inc si
    inc di
    mov [es:di],bh
    inc di
    jmp @l1

@end:   jmp $                ;無限循環

str:    db 'hello,welcome to the OS-World!!#'

    times 510 - ($ - $$) db 0
    dw 0xaa55

操作系統的啓動

計算機啓動後,執行BIOS系統,BIOS系統執行完後會把引導扇區加載到內存地址0000:7c00處,並跳轉到該地址執行。

引導扇區:

引導扇區是啓動介質的第一個扇區(0面0磁道1扇區),軟盤、硬盤都是如此。(每個扇區大小爲512字節)
而一個有效的引導扇區唯一的證明就是最後兩個字節必須爲0x55,0xaa(第511個字節:0x55,第512個字節:0xaa)

有了上面的信息,我們就知道只要把我們的“操作系統”放在引導扇區,便可以執行。
P.S.但其中要注意的是由於不是通過操作系統打開,因此沒有地址重定位,調用代碼中的地址/標誌(偏移地址)時,必須加上該代碼在內存中的加載地址,才的到實際地址,例如上面代碼中str

    mov si,str + 0x7c00      ;偏移地址

str內存中實際地址 = str相對改代碼開頭的地址 + 該代碼在內存中實際地址(0x7c00)

最後在virtual box下運行結果爲:

運行結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章