INT 13中斷功能

2021-05-28 04:59:53 字數 3974 閱讀 2689

中斷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)

INT0及INT1中斷計數

名稱 int0及int1中斷計數 說明 每次按下第1個計數鍵時,第1組計數值累加並顯示在右邊3只數碼管上,每次按下第2個計數鍵時,第2組計數值累加並顯示在左邊3只數碼管上,後兩個按鍵分別清零。include define uchar unsigned char define uint unsigne...

int 9中斷例程優化分析

上篇文中我們已經實現了int9中斷例程的編寫,根據課後檢測點我們對上文 做出優化。如下 assume cs code stack segment db 128 dup 0 stack ends data segment dw 0,0 data ends code segment start mov ...

x86中斷(一) 中斷分類

一 中斷分類 x86系統支援256個中斷源,每個中斷源使用0 255數字標識,該標識稱作中斷向量號 即cpu中斷源的中斷號,要與外部中斷的中斷號irq n相區別 cpu通過獲取中斷向量號識別中斷源。256個中斷源可以分為 其中 1 內部中斷 由cpu內部事件及執行軟中斷指令產生,由除法中斷 溢位中斷...