
實驗12 編寫 0 號中斷的處理程序
- 我們要做以下幾個事情:
- 編寫可以顯示 "divide error!" 的中斷處理程序:do0
- 將 do0 送入內(nèi)存 0000:0200 處
- 將 do0 的入口地址 0000:0200 存儲在中斷向量表 0 號表項中
- 編寫一個除法溢出的測試程序,用于觸發(fā)除法錯誤,產(chǎn)生內(nèi)中斷
- 代碼實現(xiàn):
文件名:exp12.asm
assume cs:code
code segment
start:
mov ax, cs
mov ds, ax
mov si, offset do0 ; 設(shè)置 ds:si 指向源地址
mov ax, 0
mov es, ax
mov di, 200h ; 設(shè)置 es:di 指向目的地址
mov cx, offset do0end - offset do0 ; 設(shè)置 cx 為傳輸長度
cld ; 設(shè)置傳輸方向為正
rep movsb
; 設(shè)置中斷向量表
mov ax, 0
mov es, ax
mov word ptr es:[0 * 4], 200h ; 中斷處理程序的偏移地址
mov word ptr es:[0 * 4 + 2], 0h ; 中斷處理程序的段地址
mov ax, 4c00h
int 21h
do0:
jmp short do0start
db "divide error!"
do0start:
mov ax, cs
mov ds, ax
mov si, 202h ; 設(shè)置 ds:si 指向字符串
mov ax, 0b800h
mov es, ax
mov di, 12*160 + 36*2 ; 設(shè)置 es:di 指向顯存空間的中間位置
mov cx, 13 ; 設(shè)置 cx 為字符串的長度
s:
mov al, ds:[si]
mov es:[di], al
mov byte ptr es:[di + 1], 02h ; 設(shè)置字符屬性
inc si
add di, 2
loop s
mov ax, 4c00h
int 21h
do0end:
nop
code ends
end start
-
跟蹤調(diào)試過程:
實驗12 跟蹤調(diào)試過程 測試程序:
參考書本第 12 章中的例子,編寫一個除法溢出的測試程序
文件名:exp12div.asm
assume cs:code
code segment
start:
mov ax, 1000h
mov bh, 1
div bh
mov ax, 4c00h
int 21h
code ends
end start
-
測試程序的聯(lián)調(diào)測試過程:
實驗12 中斷處理程序和測試程序聯(lián)調(diào)測試過程

