30天自制作業系統-merk11的第一天
自制作業系統是因為學校老師留的實驗作業,也是為了加深自己對作業系統的細節理解,
在google上千辛萬苦找到了一些適合于新手開發簡單作業系統的教程
用的環境是windows,虛擬環境是QEMU
書籍:
《30天自制作業系統》出版社:人民郵電出版社
github中文磁盤原始碼對照:
https://github.com/yourtion/30dayMakeOS
https://github.com/chenganglist/30dayMakeOS
書籍pdf在線:
http://file.qijin.tech/ebooks/30天自制作業系統_compressed.pdf
衷心感謝以上資源的提供者,為初出茅廬的大學牲提供了幫助??????
筆記:
環境配置: 二進制編輯器(十六進制編輯器)
VScode,Winhex ,NotePad++ 或者其他自己用得熟的編輯器都可以
匯編指令學習:
DB: 是“define byte”的縮寫,也就是往檔案里直接寫入1個位元組的指令,可以直接用它寫字串
DB "hello,world"
RESB:是“reserve byte”的略寫,如果想要從現在的地址開始空出10個位元組來,就可以 寫成RESB 10,意思是我們預約了這10個位元組(大家可以想象成在對號入座的火車里,預訂了10 個連號座位的情形),
DW:和DB類似,一次讀取2個位元組
DD:和DB類似,一次讀取4個位元組
美元符號:這里是個變數,可以告訴我們這一行現在的位元組數
RESB 0x1fe-$
主要原始碼(可以自己嘗試寫的部分):
; hello-os
; TAB=4
; 標準FAT12格式軟盤專用的代碼 Stand FAT12 format floppy code
? DB 0xeb, 0x4e, 0x90
? DB "MERK11" ; 啟動扇區名稱(8位元組)
? DW 512 ; 每個扇區(sector)大小(必須512位元組)
? DB 1 ; 簇(cluster)大小(必須為1個扇區)
? DW 1 ; FAT起始位置(一般為第一個扇區)
? DB 2 ; FAT個數(必須為2)
? DW 224 ; 根目錄大小(一般為224項)
? DW 2880 ; 該磁盤大小(必須為2880扇區1440*1024/512)
? DB 0xf0 ; 磁盤型別(必須為0xf0)
? DW 9 ; FAT的長度(必須是9扇區)
? DW 18 ; 一個磁道(track)有幾個扇區(必須為18)
? DW 2 ; 磁頭數(必須是2)
? DD 0 ; 不使用磁區,必須是0
? DD 2880 ; 重寫一次磁盤大小
? DB 0,0,0x29 ; 意義不明(固定)
? DD 0xffffffff ; (可能是)卷標號碼
? DB "MERK-OS " ; 磁盤的名稱(必須為11位元組,不足填空格)
? DB "FAT12 " ; 磁盤格式名稱(必須是8位元組,不足填空格)
? RESB 18 ; 先空出18位元組
; 程式主體
? DB 0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
? DB 0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
? DB 0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
? DB 0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
? DB 0xee, 0xf4, 0xeb, 0xfd
; 資訊顯示部分
? DB 0x0a, 0x0a ; 換行兩次
? DB "It is impossible to manufacture or imitate love."
? DB 0x0a ; 換行
? DB 0
? RESB 0x1fe-$ ; 填寫0x00直到0x001fe
? DB 0x55, 0xaa
; 啟動扇區以外部分輸出
? DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
? RESB 4600
? DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
? RESB 1469432
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/354399.html
標籤:其他
下一篇:15. mac安裝多版本jdk
