Write Your Own Operating System Tutorial(中文版)- Lesson 3: NASM

 Lesson 3: NASM


    這節課我們將學着用一個彙編語言編譯器來寫我們的程序。前幾課裏我們使用的是DEBUG。把玩過這些之後,你很快就會發現用DEBUG來編寫哪怕是一小段指令都是非常痛苦的(改起來更難)。我們需要簡單的方法。我們將從使用“Netwide Assembler”(NASM)開始。去它的官方網站http://www.octium.net/nasm/,你能得到一份編譯器。

    現在我們將藉助這個編譯器,來創建和我們在Lesson 2末尾一樣的操作系統。下載啓動程序h.asm並且仔細看一看。第一條指令應該還算熟悉。這是跳過引導記錄數據的指令。在這裏,它跳到標號begin處。在跳轉指令後面是20字節的數據。這是我用DEBUG從我磁盤上讀到的。這些值應該可以用。如果你願意,你也可以用你磁盤上的數據來替換它們。它們中的大多數可能是一樣的。

(注意:在DEBUG中,一個字節以上的數據在顯示時是顛倒的。因爲在INTEL架構中,低字節存儲在低地址,反之亦然。所以字節看上去是倒的。)

標號begin之後的代碼和我們在第二課寫的差不多,僅僅是在屏幕上打出字母“H”然後進入死循環。在文件的最後,你能夠看到我對這段代碼長度是否爲512字節(一個扇區的大小)進行了檢查,之後以“times”開始的那一行開始在代碼的末尾添加0,直到文件的最後。這是爲了使可執行部分的大小正好爲510字節。再之後,是兩字節的署名0x55,0xAA。在命令行方式下輸入以下命令,編譯這個文件。

nasmw h.asm -o h.bin

這將把文件編譯爲純二進制文件h.bin。看一下文件的大小。如果你順利的話,那應該正好是512字節,正好能夠放到軟盤的引導扇區去。

現在我們要把這個文件複製到軟盤上。插入軟盤,運行DEBUG,輸入一下命令。

debug

-n h.bin

-l 0


這將把我們的文件載入到開始地址爲0的內存。如果你想看看文件是不是被順利的編譯和加載,你可以使用dump(d)和unassemble(u)命令。你可以看到我們剛纔寫的可憐巴巴的幾行代碼。注意看一下,文件中已經正確的添加了0以用來對齊,直到扇區最後的0x1FE和0x1FF。另外,DEBUG在CX寄存器中記錄了一共從文件中讀入了多少字節。(你可以用r命令來顯示寄存器的內容。)

當軟驅中有軟盤的時候,用這條命令將文件寫入磁盤。

-w 0 0 0 1

用這張盤重啓計算機,看看實際動作的程序吧。現在,在源碼中試試其他東西。例如,修改一下代碼來打印更多的字符。如果你準備好了,我們將進入下一課,在那裏,我們將創建一個“Hello, World”操作系統。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章