回覆三 2011.11.16

不好意思 我是買了作業系統開發實戰手冊的讀者....

但是我發現剛開始看書有很多問題

所以想要問一下

我看了第四章

但是我發現有很多組合語言的東西 我看不懂

4.3.3.5 讀取並執行映像

02 mov byte [CurrentSector] ,0x03 這感覺起來好像是把 3 的十六進位放到 CurrentSector 的位置裡面 但是前面的byte 就不知道是幹嘛了?

07 jmp OS_IMAGE_SEGMENT:0 請問 jmp 後面的 OS_IMAGE_SEGMENT 跟 0 中間有個冒號 是什麼意思?

謝謝



回覆如下.

02 mov byte [CurrentSector] ,0x03
這是 nasm 支援的組合語言寫法.
byte 是指操作的記憶體單位是位元組,長度是八位元.
如果改寫成 mov word [CurrentSector],0x03 就變成把 0x03 寫到 CurrentSector 這個 word 裡面,word 有十六位元的長度.


07 jmp OS_IMAGE_SEGMENT:0
這是 80x86 在真實模式底下,最基本的跳躍指令.
80x86 的位址由程式節區暫存器(cs)和指令指標(ip)組成.
因為我把作業系統映像放在 0x100000 的位址上,換算成 cs:ip 就是 0x1000:0
OS_IMAGE_SEGMENT 的值是 0x1000
執行這個指令後,程式就會跑到 0x10000 的位址上執行後面的作業系統映像

你問的問題是最基本組合語言問題.
因為這本書是以作業系統的程式設計為主要內容.
對於組合語言的說明比較依賴組合語言的專門書籍.
作業系統的底層很依賴組合語言.
你可能需要去買一本講 NASM 組合語言的書.

陳育書