1、原题目
2、个人代码
安装0号中断中断处理程序
assume cs:code
code segment
start:
;do0安装程序
mov ax,0
mov es,ax
mov di,200h;设置es:di指向目的地址
mov ax,cs
mov ds,ax
mov si,offset do0;设置ds:si指向源地址
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],0;调用第几号中断程序,第一个乘数就是几
mov ax,4c00h
int 21h
do0:
jmp short do0start
db "divide error!"
do0start:
mov ax,cs
mov ds,ax
mov si,202h
mov ax,0B800h
mov es,ax
mov di,12*160+36*2;设置es:di指向显存空间的中间位置
mov cx,13;设置cx为字符串长度
s:
mov al,[si]
mov es:[di],al
mov byte ptr es:[di+1],2;设置颜色属性
inc si
add di,2
loop s
mov ax,4c00h
int 21h;中断处理程序完成后返回到DOS
do0end:
nop
code ends
end start
3、结果
中断处理程序安装后
再编写一个程序进行测试
assume cs:code
code segment
start:
mov ax,1000h
mov bl,1
div bl
mov ax,4c00h
int 21h
code ends
end start
执行结果如下:
但是debug调试的时候为什么会单步中断进行中断处理程序,在进入中断处理程序之前不是已经设置TF=0了吗?
这一点和书上不一样(待考虑)