30天自製作業系統讀書筆記 一

2022-05-05 05:57:09 字數 2758 閱讀 9799

剛開始作者叫我們用二進位制編輯器,手敲01**寫了個img(磁碟映像檔案)

,並提供了一些檔案

:run.bat, install.bat這些乙個批處理檔案,其實就是寫好了cmd指令儲存到文件裡面,方便以後執行。

其中run.bat裡面的指令是這樣的

copy helloos.img ..\z_tools\qemu\fdimage0.bin

..\z_tools\make.exe         -c ../z_tools/qemu

(稍微解釋一下:第一行:copy指令把,helloos.img 複製成..\z_tools\qemu\fdimage0.bin其中 ..\表示上級目錄。

第二行使用make程式 -c ../z_tools/qemu 表示傳遞給make的引數。具體什麼作用目前還不知道)

然後是install.bat:

..\z_tools\imgtol.com w a: helloos.img  //此句是將helloos.img寫到軟盤上

作者提供了乙個虛擬器,所以為了避免麻煩,我就使用虛擬器了。

哦,虛擬器,run.bat的作用就顯而易見了,就是把磁碟映像複製到虛擬器目錄下然後並啟動它。

或許作者覺得手寫01**實在過於麻煩,於是他又改用了彙編**。

書中使用的彙編編譯器 nask是作者自己開發的

第一段彙編**中作者只是使用了 db指令,表示定義乙個位元組。

作者也覺得的**太長,於是又使用了resb指令。

然後作者竟然乙個大跳躍,直接上了連爹媽都不認識的改良版**。

剛開始一堆db dw的,作者稱為標準fat12軟盤專用**。

這段完全由資料組成的**只是符合了乙個軟盤啟動扇區的標準

引導扇區是軟盤的第0個扇區,在這個扇區中有乙個很重要的資料結構叫bpb(bios parameter block),下面是引導扇區格式,其中bpb_開頭的屬於bpb,以bs_開頭的只是boot sector的一部分,不屬於bpb。

名稱開始位元組

長度內容

參考值bs_jmpboot03

乙個短跳轉指令

jmp label_07c00h

nop

bs_oemname 3

8廠商名

'qingfeng'

bpb_bytespersec

11 2

每扇區位元組數(bytes/sector)

0x200

bpb_secperclus

13 1

每簇扇區數(sector/cluster)

0x1bpb_resvdseccnt

14 2

boot記錄占用多少扇區

ox1bpb_numfats

16 1

共有多少fat表

0x2bpb_rootentcnt

17 2

根目錄區檔案最大數

0xe0

bpb_totsec16

19 2

扇區總數

0xb40[2*80*18]

bpb_media

21 1

介質描述符

0xf0

bpb_fatsz16

22 2

每個fat表所佔扇區數

0x9bpb_secpertrk

24 2

每磁軌扇區數(sector/track)

0x12

bpb_numheads

26 2

磁頭數(面數)

0x2bpb_hiddsec

28 4

隱藏扇區數 0

bpb_totsec32

32 4

如果bpb_totsec16=0,則由這裡給出扇區數 0

bs_drvnum

36 1

int 13h的驅動器號 0

bs_reserved1

37 1

保留,未使用 0

bs_bootsig

38 1

擴充套件引導標記(29h)

0x29

bs_volid

39 4

卷序列號 0

bs_vollab

4311

卷標'qingfeng'

bs_filesystype

54 8

檔案系統型別

'fat12'

引導**及其他內容

62448

引導**及其他資料

引導**(剩餘空間用0填充)

結束標誌0xaa55

510 2

第510位元組為0x55,第511位元組為0xaa

0xaa55

噢!原來是資料結構。叫做bios parameter block (bios引數塊),那麼顧名思義一下?或許是給bios讀取用的吧!?

對了還有乙個重要的$符號,作者解釋的很詳細了,博主比較懶,所以就不打字了!

好啦,只剩下幾個名詞了,自己看書吧。

稍微總結下不太熟悉的幾個知識點:

1、  啟動區是第乙個扇區,512位元組為乙個扇區。扇區的最後2個位元組為55 aa

啟動區的名稱必須是8個位元組,不夠的話空格補齊.

2、  ipl ,啟動程式載入器。啟動區只有512位元組,所以在這裡面根本裝不下作業系統,

所以裡面裡面存放的是載入作業系統本身的程式。

3、db定義位元組型1位元組,dw定義字型別2位元組,dd定義雙字類4位元組

恩,時間不早了,第一天就這麼過去吧. 喂喂喂!那段這麼長的**,你倒是分析下啊!

(不會!)

30天自製作業系統讀書筆記 六

首先先整理下 自谷月軒的部落格 現在我們擁有這麼9個檔案 恩,接下裡我們補坑。介紹下gdt和idt c語言描述 struct segment descriptor 我們知道現在段位址是32位的。在這個結構裡用base表示,但是它分成了3段 low 2位元組 mid 1位元組 high 1位元組 剛好...

30天自製作業系統讀書筆記 五

為了讓程式靈活點,作者覺得把什麼320x200這些資料直接寫入程式,不如讓程式自己獲取。所以就引入了結構體,指標。用指標直接在記憶體中獲取這些資料 如程式裡的這句 binfo scrnx short 0xff4 對於結構體和指標我就不細寫了,有c語言基礎的人都知道。因為已經進入了32位模式,所以不能...

30天自製作業系統

第一天的內容很少,是一些簡單的基礎知識,在這裡我就沒有必要寫出來了,只說出大概的輪廓了,然後我會對其中的幾點進行詳細的解釋。文章的第一天的輪廓大概是這樣的,作者首先用二進位制編輯器做了乙個顯示二進位制的程式,然後用彙編完全db的形式,後又進行改善,最後以比較標準的組合語言編寫,但程式主體部分還沒有翻...