这个实验其实没有什么好说的,把前面的几个地方稍微改下,就可以了。
不过为了让自己印象深刻些,我还是讲一下。
解析:要求:是使得在除法溢出发生时,在屏幕中间显示字符串“divide error!”总共占13个字符(空格什么的都算上去)
,然后返回到dos。
下面我给出代码,代码有注释。
assume cs:code
code segment
start: mov ax,cs
mov ds,ax
mov si,offset do0 ;获取do0位置的偏移地址
mov ax,0
mov es,ax
mov di,200h
mov cx,offset do0end-offset do0 ;获取循环次数
cld ;df设置成0,防止引发单步中断
rep movsb ;循环将do0~do0end的指令写入到0:0200~
mov ax,0
mov es,ax
mov word ptr es:[0*4],200h ;将偏移值地址写入0:0
mov word ptr es:[0*4+2],0 ;将段地址写入0:0002
mov ax,4c00h
int 21h
do0:jmp short dostart
db"divide error!"
dostart:mov ax,cs
mov ds,ax
mov si,202h ;jmp short dostart 占两个字节
mov ax,0b800h ;字母开头要加0
mov es,ax
mov di,12*160+36*2 ;13行第37列
mov cx,13
s: mov al,[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
debug运行下