中斷INT13功能及用法分析
INT 13H,AH=00H 軟、硬碟控制器複位
說明:
此功能複位磁碟(磁碟片和硬碟)控制器板和磁碟機,它在磁碟控制卡
晶片上完成複位操場作並在磁碟進行所需的操作之前做一系列用於磁碟校準的
磁碟操作。
當磁碟I/O功能調用出現錯誤時,需要調用此功能,此刻複位功能將使BIOS
象該磁碟重新插入一樣檢查磁碟機中磁碟狀態,並將磁頭校準使之在應該在的
位置上。
此功能調用不影響磁碟片或硬碟上的資料。
入口參數:
AH=00H 指明調用複位磁碟功能。
DL 需要複位的磁碟機代號。
返回參數:
若產生錯誤,進位標誌CF=1,錯誤碼在AH寄存器。
詳情請見磁碟錯誤狀態返回碼一文。
樣本:
C_SEG SEGMENT PUBLIC
ASSUME CS:C_SEG,DS:C_SEG
ORG 100H
START: MOV AH, 00H
MOV DL, 80H
INT 13H
;複位硬碟 C
JC ERROR
……
ERROR: ……
C_SEG ENDS
END START
INT 13H,AH=02H 讀扇區說明:
調用此功能將從磁碟上把一個或更多的扇區內容讀進存貯器。因為這是一個
低級功能,在一個操作中讀取的全部扇區必須在同一條磁軌上(磁頭號和磁軌號
相同)。BIOS不能自動地從一條磁軌末尾切換到另一條磁軌開始,因此使用者必須
把跨多條磁軌的讀操作分為若干條單磁軌讀操作。
入口參數:
AH=02H 指明調用讀扇區功能。
AL 置要讀的扇區數目,不允許使用讀磁軌末端以外的數值,也不允許
使該寄存器為0。
DL 需要進行讀操作的磁碟機代號。
DH 所讀磁碟的磁頭號。
CH 磁軌號的低8位元。
CL 低5位放入所讀起始扇區號,位7-6表示磁軌號的高2位。
ES:BX 讀出資料的緩衝區地址。
返回參數:
如果CF=1,AX中存放出錯狀態。讀出後的資料在ES:BX地區依次排列。
詳情請參見磁碟錯誤狀態返回碼一文。
樣本:
C_SEG SEGMENT PUBLIC
ASSUME CS:C_SEG,DS:C_SEG
ORG 100H
START: JMP READ
BUFFER DB 512 DUP(0)
READ: PUSH CS
POP ES
MOV BX, OFFSET BUFFER
MOV AX, 0201H
MOV CX, 0001H
MOV DX, 0000H
INT 13H
;讀磁碟片A, 0面0道1扇區
;讀出後資料在BUFFER中
JC ERROR
……
ERROR: ……
C_SEG ENDS
END START
INT 13H,AH=03H 寫扇區
說明:
調用此功能將從磁碟上把一個或更多的扇區內容寫入磁碟機。因為這
是一個低級功能,在一個寫入操作中的全部扇區必須在同一條磁軌上(磁
頭號和磁軌號相同)。BIOS不能自動地從一條磁軌末尾切換到另一條磁軌
開始,因此使用者必須把跨多條磁軌的寫操作分為若干條單磁軌寫操作。
入口參數:
AH=03H 指明調用寫扇區功能。
AL 置要寫的扇區數目,不允許使用超出磁軌末端以外的數值,
也不允許使該寄存器為0。
DL 需要進行寫操作的磁碟機代號。
DH 所寫磁碟的磁頭號。
CH 磁軌號的低8位元。
CL 低5位放入所讀起始扇區號,位7-6表示磁軌號的高2位。
ES:BX 放置寫入資料的存貯區地址。
返回參數:
如果CF=1,AX中存放出錯狀態。
詳情請參見磁碟錯誤狀態返回碼一文。
樣本:
C_SEG SEGMENT PUBLIC
ASSUME CS:C_SEG,DS:C_SEG
ORG 100H
START: JMP WRITE
BUFFER DB 512 DUP(0FFH)
WRITE: PUSH CS
POP ES
MOV BX, OFFSET BUFFER
MOV AX, 0301H
MOV CX, 0001H
MOV DX, 0000H
INT 13H
;寫入磁碟片A, 0面0道1扇區
;把此扇區資料全部置為0FFH
JC ERROR
……
ERROR: ……
C_SEG ENDS
END START
INT 13H,AH=04H 檢測扇區
說明:
這個功能檢測磁碟上1個或更多的扇區。這個驗證測試不是把磁碟上的
資料和記憶體中的資料進行比較,而只是簡單地確定讀出的資料有無CRC錯誤。
這個功能可用來驗證磁碟機中的磁碟片版。如果碟片的格式正確,CF=0。
入口參數:
AH=03H 指明調用檢測扇區功能。
AL 置要檢測的連續扇區數目,不允許使用超出磁軌末端以外的
數值,也不允許使該寄存器為0。
DL 需要進行檢測的磁碟機代號。
DH 磁碟的磁頭號。
CH 磁軌號的低8位元。
CL 低5位放入起始扇區號,位7-6表示磁軌號的高2位。
返回參數:
如果CF=1,AX中存放出錯狀態。CF=0,檢測正確。
詳情請參見磁碟錯誤狀態返回碼一文。
樣本:
C_SEG SEGMENT PUBLIC
ASSUME CS:C_SEG,DS:C_SEG
ORG 100H
START: MOV AX, 0401H
MOV CX, 0001H
MOV DX, 0000H
INT 13H
;檢測磁碟片A, 0面0道1扇區
JC ERROR
……
ERROR: ……
C_SEG ENDS
END START
磁碟錯誤狀態返回碼:
磁碟錯誤狀態
AH=
00H 未出錯
01H 非法功能調用命令區。
02H 地址標記損壞,扇區標識(ID)無效或未找到。
03H 企圖對有防寫保護的磁碟片執行寫操作。
04H 所尋找的扇區沒找到。
05H 複位操作失敗。
06H 無介質。
07H 初始化錯誤,資料未存在DMA的64K緩衝區內。
08H DMA故障
09H DMA邊界錯誤,資料未存在DMA的64K緩衝區內。
0AH 檢測出錯誤碼率的扇區標誌。
0BH 所尋找的磁軌沒找到。
0CH 介質類型沒發現。
0DH 扇區號有問題。
0EH 發現控制資料地址標記。
0FH 超出DMA邊界
10H 讀磁碟時同位錯,且錯誤修正碼(EDC)不能糾正。
11H 讀磁碟時同位錯,但錯誤修正碼(EDC)已糾正錯誤。
20H 控制器錯。
40H 尋找操作無效。
80H 逾時錯誤,磁碟機不響應。
AAH 磁碟機未準備好。
BBH 不明錯誤。
CCH 被選磁碟機出現寫故障。
E0H 錯誤寄存器是零
FFH 非法操作。
備忘:
控制器的最後狀態將會在磁碟操作完成後寫入相應的BIOS資料區(40:41)