自製作業系統(二)

2021-09-26 06:53:39 字數 1337 閱讀 5687

現在呢,大致流程寫在下面:

首先,編寫彙編**,**檔名為myos.asm,所有**大致如下:

; 下面是標準fat12格式軟盤專用**

db 0xeb, 0x4e, 0x90

db "myos_ipl" ; 啟動區名稱,必須8位元組

dw 512 ; 每個扇區必須為512位元組

db 1 ; 蔟必須為1個扇區

dw 1 ; fat的起始位置必須為1

db 2; fat的個數必須為2

dw 224 ; 根目錄大小必須為224

dw 2880; 該磁碟的大小必須為2880扇區

db 0xf0 ; 磁碟的種類,必須是0xf0

dw 9 ; fat的長度必須為9

dw 18 ; 1個磁軌有幾個扇區必須為18

dw 2 ; 磁頭數必須是2

dd 0 ; 不使用分割槽,必須是0

db 0,0,0x29 ; 意義不明,固定

dd 0xffffffff ; 可能是卷標號碼

db "myos_sodisk" ; 磁碟的名稱,必須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 ; 2個換行

db "hellloworld"

db 0x0a ; 換行

db 0

times 510 - ($-$$) db 0 ; 填寫0,直到0x001fe

db 0x55, 0xaa ; 必須保證第510位元組(0x1fe)開始的地方是55 aa

; 以下是啟動區以外部分的輸出

db 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00

resb 4600

db 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00

resb 1469432

nasm myos.asm -o myos.img

自製作業系統 二

組合語言學習與makefile入門 2.helloos.nas程式核心部分。jmp指令 jump,跳轉。相當於c中的goto。mov指令 move,移動。理解mov指令就理解彙編一大半。指賦值的功能 把乙個東西移走了,他原來占用的位置不會空出 3.cpu的一種儲存電路 暫存器,相當於變數的功能。以下...

自製作業系統流程筆記(二)

筆記一主要記錄了保護模式的知識,筆記二將從os進入保護模式開始。參考 使用diskgenius模擬軟盤檔案做實驗。fat12是microsoft公司dos作業系統所支援的檔案系統之一,此外還有fat16和fat32,之後會分別詳述這些檔案系統。當軟盤被標準格式化後,磁碟被格式化為 每磁頭80個柱面 ...

自製作業系統 (2)

接上篇,檔案跳轉到了entry.s裡面,這是kernel的入口。首先面臨這麼乙個問題,kernel被載入到了什麼地方?回想上篇elf檔案的載入機制,以及objdump裡列印出的kernel資訊,可以看到,kernel的 段 text段 被載入到了0x100000的位置,也就是1m的位置,所以記憶體布...