風雲道者經典錄論壇

 找回密碼
 立即註冊
查看: 1417|回復: 1

萬事開始難!一個非常簡短的操作系統實現

[複製鏈接]
發表於 2016-10-4 13:25:09 | 顯示全部樓層 |閱讀模式
本帖最後由 林傳說 於 2016-10-21 18:43 編輯

引導區代碼

    ;; BIOS會把512字節的引導扇區加載到 0000:7c00 處,
    ;; 然後跳轉到0000:7c00處,將控制權交給引導代碼。
    org 07c00h                  ;這一行告訴編譯器,我們的代碼將被加載到7c00處。
    mov ax, cs                 
    mov ds, ax                  
    mov es, ax                 
    call  DispStr               ;調用顯示字符串例程
    jmp $                       ;無限循環, $表示當前行編譯後的地址
    ;; 下面是DispStr子程序
DispStr:
    mov ax, Message            ;將字符串首地址傳給寄存器ax
    mov bp, ax        
    mov cx, 16           
    mov ax, 01301h
    mov bx, 000ch
    mov dl, 0            
    int 10h                     ;BIOS的10H中斷的13號中斷用於顯示字符串
    ret
Message:    db "Hello, My OS world!"
    ;; $當前行被匯編後的地址,$$表示一個section開始處的地址,本程序只有一個section,所以指0x7c00
    times 510-($-$$) db 0           ;填充剩下空間,使生成的二進制恰好為512字節
    dw 0xaa55                       ;結束標誌,如果發現扇區以0xAA55結束,則BIOS認為它是一個引導扇區,dw表示define word

將此段代碼保存爲boot.asm,然後用nasm匯編。
nasm boot.asm -o boot.bin
之後以WinHex工具,將boot.bin寫入U盤的零扇區(即最磁道最開始的地址),開機以U盤啟動,就能看到屏幕顯示:
Hello,My OS world!


建議用舊機來測試,新機的Bios改變了地方,未必是從0000:7c00開始。
由於這個程式比較危險,故暫不放上如何用WinHex寫入。用前要先備份U盘的資料(一改這個零扇區,U盤的資料都沒有),
而且要備份開始的512字節(Byte),測試完後寫回,否則用WIN7/10都不能格式化,要用此品牌的U盤修復工具才能格式化的,要慎重!


 樓主| 發表於 2016-10-21 18:43:51 | 顯示全部樓層
第二個簡短的例子很快有了。

Archiver|宇宙無神佛,世界所有宗教都是騙

GMT+8, 2020-2-21 09:19

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表