組合語言(第3版,王爽著):實驗12 編寫 0 號中斷的處理程式
阿新 • • 發佈:2022-05-26
- 我們要做以下幾個事情:
- 編寫可以顯示 "divide error!" 的中斷處理程式:do0
- 將 do0 送入記憶體 0000:0200 處
- 將 do0 的入口地址 0000:0200 儲存在中斷向量表 0 號表項中
- 編寫一個除法溢位的測試程式,用於觸發除法錯誤,產生內中斷
- 程式碼實現:
檔名:exp12.asm
assume cs:code code segment start: mov ax, cs mov ds, ax mov si, offset do0 ; 設定 ds:si 指向源地址 mov ax, 0 mov es, ax mov di, 200h ; 設定 es:di 指向目的地址 mov cx, offset do0end - offset do0 ; 設定 cx 為傳輸長度 cld ; 設定傳輸方向為正 rep movsb ; 設定中斷向量表 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 ; 設定 ds:si 指向字串 mov ax, 0b800h mov es, ax mov di, 12*160 + 36*2 ; 設定 es:di 指向視訊記憶體空間的中間位置 mov cx, 13 ; 設定 cx 為字串的長度 s: mov al, ds:[si] mov es:[di], al mov byte ptr es:[di + 1], 02h ; 設定字元屬性 inc si add di, 2 loop s mov ax, 4c00h int 21h do0end: nop code ends end start
-
跟蹤除錯過程:
-
測試程式:
參考書本第 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
- 測試程式的聯調測試過程: