30天自制操作系統-merk11的第一天


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM