【第十二章】实验12

assume cs:code
;设置除法溢出的中断指令
;首先将do0的这段代码写入0:0200位置处(在do0结尾设立另一个标号,用offset do0End-do0计算do0长度)
;之后写出do0程序,程序要在0b800:15*160的位置打印"divide error!"
code segment
main: ;设置源地址
mov ax,code
mov ds,ax
mov si,offset do0
;设置目标地址
mov ax,0
mov es,ax
mov di,200h
;将中断程序送入指定内存中
mov cx,offset do0End - offset do0
cld
rep movsb
;将中断向量表中0项地址改为do0的地址
mov ax,0
mov es,ax
mov word ptr es:[0],200h
mov word ptr es:[2],0
;测试程序
mov ax,1000
mov bh,1
div bh
mov ax,4c00h
int 21h
do0: jmp short do0Start
db 'Divide Error!',0
do0Start: ;设置寄存器指向do0中字符串
mov ax,0
mov ds,ax
mov si,202h
;设置字符串放入地址
mov ax,0b800h
mov es,ax
mov di,12*160+36*2
;将字符串放入显存中
s: cmp byte ptr [si],0
je short end1
mov ah,[si]
mov es:[di],ah
inc si
add di,2
jmp short s
end1: mov ax,4c00h
int 21h
do0End:nop
code ends
end main