需要注意的几个错误
- 200H和202H,要在编辑器中末尾加H,以注明是HEX,否则会将do0程序安装到错误位置
- 设置中断向量表时,要注明mov word ptr,否则会报错operand must have size,因为未注明要向多大的数据(几个内存单元)进行写入
;实验12:编写0号中断的处理程序
;火箭(送卫星进预定位置) - do0的安装程序
assume cs:code
code segment
start: mov ax,cs
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;仅复制,并不是call,所以此时不会执行do0,故下句的es不用重新设置
;设置中断向量表
mov word ptr es:[0*4+2],0
mov word ptr es:[0*4],200h
mov ax,4c00h
int 21h
;卫星(搭载在火箭内) - do0
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
mov cx,13
s: mov al,[si]
mov es:[di],al
inc si
add di,2
loop s
mov ax,4c00h
int 21h
do0end:nop
code ends
end start
;验证
a 2000:0
mov bl,1
mov ax,ffff
div bx;构造一个除法溢出(因为FFFF除以1之后,商和结果无法存储在仅有8位的al和ah中)
结果符合预期