《一個64位作業系統的設計與實現》閱讀筆記: 第一個作業系統的執行
阿新 • • 發佈:2019-01-01
廢話不多說,直接上boot.asm檔案程式碼
org 0x7c00 ;設定引導起始地址 BaseOfStack equ 0x7c00 ;設定常量BaseOfstack為0x7c00 Label_Start: mov ax, cs mov ds, ax mov es, ax mov ss, ax mov sp, BaseOfStack ;棧頂設定為0x7c00 ;======= clear screen mov ax, 0600h ;ah=06h時,int 10h中斷設定滾動視窗的功能, al=0則實現清屏 mov bx, 0700h mov cx, 0 mov dx, 0184fh int 10h ;======= set focus mov ax, 0200h ;ah=02h時,int 10h中斷為設定游標 mov bx, 0000h mov dx, 0000h int 10h ;======= display on screen : Start Booting...... mov ax, 1301h ;ah=13h時,int 10h中斷為顯示一行字串 mov bx, 000fh mov dx, 0000h mov cx, 10 push ax mov ax, ds mov es, ax pop ax mov bp, StartBootMessage int 10h ;======= reset floppy xor ah, ah xor dl, dl int 13h jmp $ StartBootMessage: db "Start Boot" ;======= fill zero until whole sector times 510 - ($ - $$) db 0 ;不夠512位元組的用0填充 dw 0xaa55
功能都寫到註釋裡了,其他引數意義請自行查書(愛因斯坦說過:“能查的東西就不要去記”, 不過前提是你知道在哪查就是了)
使用nasm(請自行安裝)編譯彙編程式碼
nasm boot.asm -o boot.bin
dd if=boot.bin of=./boot.img bs=512 count=1 conv=notrunc
if=boot.bin是指輸入的二進位制檔名。of=是輸出的映像檔名,請自行根據路徑修改
然後執行此映像
bochs -f ./bochsrc
路徑請根據個人設定的bochsrc檔案進行修改,關於bochsrc檔案配置,可參考這篇文章 《一個64位作業系統的設計與實現》閱讀筆記,centos7下bochs安裝與環境搭建
bochsrc檔案需要自行修改,如1_44="boot.img"還有系統配置之類的。
如果不成功,請檢查bochsrc的設定。
成功時
輸入6或者直接回車確認
如果遇到這個介面。輸入c或者cont或者continue
最後成功執行