这个实验其实没有什么好说的,把前面的几个地方稍微改下,就可以了。
不过为了让自己印象深刻些,我还是讲一下。
解析:要求:是使得在除法溢出发生时,在屏幕中间显示字符串“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 startdebug运行下