汇编语言--实验十二
assume cs:code
code segment
start:
;do0安装程序-----------------
mov ax,code
mov ds,ax
mov si,offset do0
mov ax,0000
mov es,ax
mov di,0200h
CLD
mov cx,offset do0end-offset do0
rep movsb
;do0安装结束-----------------
;设置0号中断程序入口---------
mov ax,0
mov es,ax
mov word ptr es:[0000],200h
mov ax,0000h
mov word ptr es:[0002],0
;0号中断程序入口设置完毕-----
mov ax,4c00h
int 21h
do0:
jmp short do0start
do0str:
db "divide error!"
do0start:
mov ax,cs
mov ds,ax
mov si,202h
mov ax,0b800h
mov es,ax
mov di,12*160+66
mov cx,13
s:
mov al,ds:[si]
mov es:[di],al
inc si
add di,2
loop s
mov ax,4c00h
int 21h
do0end:
nop
code ends
end start
思考:代码中红色标注的202h是否可以用offset do0str代替?实际上我开始也是这么处理的,但测试运行后字符并未正确显示。原因在于该主程序在编译过程中offset db0str取得的是db字符串在该主程序中的偏移地址;在安装完do0后,触发除法溢出时候我们需要的是该字符串正确的固化的地址。