剛開始作者叫我們用二進位制編輯器,手敲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的形式,後又進行改善,最後以比較標準的組合語言編寫,但程式主體部分還沒有翻...