行號 | 說明 |
02~12 | 計算 chs 模式的讀取位置,包括 sector start、head start、cylinder start。 |
02~04 | 取得磁區位置的高四位元組,不為0時,即為磁碟幾何錯誤。 |
05 | 取得磁區位置的低四位元組。 |
06 | 清除 edx 為 0。 |
07 | eax 除以 si,取得磁軌數目 eax 和磁區位置值 edx。 |
08 | 將磁區值 dl 設定給 chs 模式 PBP 的 sector start 欄位。 |
09 | 清除 edx 為 0。 |
010 | eax 除以 si,取得磁柱數目 eax 和磁頭位置值 edx。 |
11 | 將磁頭值 dl 設定給 chs 模式 PBP 的 header start 欄位。 |
12 | 將磁柱數目 eax 設定給 chs 模式 PBP 的 cylinder start 欄位。 |
13~14 | 當 cylinder start 大於或等於 cylinders,表示磁碟太小,產生磁碟幾何錯誤。 |
15 | 取得磁軌的最大磁區數。 |
16 | 最大磁區數減去sector start,得到該磁軌內可讀的磁區數。 |
17~19 | 當可讀取的磁區數大於需要的磁區數目,重新設定要讀的磁區數目為需要的磁區數目。 |
21 | 計算此次讀取後剩下的磁區數目值,目前磁區數目減去要讀取的磁區數目。 |
22 | 計算此次讀取後的磁區位置值,目前磁區位置加上要讀取的磁區數目。如果有進位,把進位值加到磁區位置的高四位元組。 |
23~28 | 因為 chs 模式下,cyliner high 會併到 sector start 位元組的高位元處,即 ch[1]ch[0]+s[5]s[4]s[3]s[2]s[1]s[0]。
將 cylinder high 向左旋六位元,再將 sector start 值加一,再將二者加在一起,即得到此組合值,存入 cl。 |
29 | 取得 cylinder low,存入 ch。 |
30~31 | 取得磁碟號碼,再存回堆疊,因為還會用到。 |
32 | 取得 header start,存入 dh。 |
30~31 | 將要讀取的磁區數目 ax,存入堆疊。 |
34~35 | 取得緩衝區的節區號碼,存入 es,準備用來存入讀取的磁碟資料。 |
36 | 清除 bx。 |
37 | 設定 ah 為 0x02,表示要執行 chs 磁碟讀取命令。 |
38 | 呼叫 bios 中斷服務 0x13,執行磁碟讀取命令。 |
39 | 當 cpu 的 cf 旗號為1,表示讀取錯誤。 |
40 | 將 es 中的 0x7000 存入 bx。 |