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
  • 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 的縮寫
    • 有「自力更生完成任務」的意思(來源是德國《吹牛大王歷險記》)