Day 1 從計算機結構到組合語言程式入門
開始看買來放了一陣的《30 天自制操作系統》(簡中翻譯日文書),原本以為是本很硬很難啃的 OS 書,沒想到意外有趣!作者有各種各樣的 murmur 跟吐槽滿點。翻譯除了專有名詞,語句上蠻通順的。
Day 1 直接用 binary editor 幹出一個 hello world OS。
本書使用的組譯器是作者自己開發的 nask,其中很多語法模仿 NASM。
nask 指令 & 符號
- DB:define byte,直接在 file 裡輸入一個 byte 的內容
- RESB:reserve byte,從現在的位置空出幾個 byte
- nask 會幫空出來的 byte 填上
0x00
- nask 會幫空出來的 byte 填上
- DW:define word
- word 在這邊是 16 bit,2 byte。
- word 長度應該是因機器架構而異。
- DD:define double word
- double word 則是 32 bit,4 byte。
指令中符號 $
代表 file 到目前這行所在的 byte 數。
術語解釋
- boot sector(啟動區)
- 電腦讀寫磁碟不是一個個 byte 讀寫,而是以 512 byte 為一個單位讀寫。512 byte 稱為一個 sector。
- floppy disk 第一個 sector 稱為 boot sector。
- 我猜對硬碟也適用
- 電腦啟動時,會從第一個 sector 讀起,檢查這個 sector 最後兩個 byte 的內容。如果最後兩 byte 是
0x55 AA
則認為這個 sector 的開頭是啟動程序,接著開始執行這個程序。反之,則是沒有啟動程序,會出現啟動錯誤。- 至於為什麼是
0x55 AA
,就當初的人亂訂的吧……(爆
- 至於為什麼是
- IPL:initial program loader 的縮寫
- boot sector 只有 512 byte,通常 OS 都放不進去,所以 boot sector 通常是放 load OS 的 loader 程式。
- 有時也將 boot sector 稱為 IPL
- boot
- 是 bootstrap 的縮寫
- 有「自力更生完成任務」的意思(來源是德國《吹牛大王歷險記》)