编写0号中断的处理程序,使得在除法溢出发生时,在屏幕中间显示字符串“divideerror! ",然后返回到DOS 要求:仔细跟踪调试,在理解整个过程之前,不要进行后面课程的学习。
1,字符串要放在不会被其他数据覆盖并且处理程序能时刻找到的位置,比如处理程序内,这样安装后程序才能找到字符串
2,ds:[si]指向字符串首地址,al保存字符,ah保存属性(红色)
3,es:[di]指向屏幕中间,ax作为输出数据
4,因为返回dos所以用21号中断而不用iret。
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 mov ax,0 mov es,ax mov word ptr es:[0*4],200h mov word ptr es:[0*4+2],0 ; 设置中断向量表 mov ax,4c00h int 21h do0:jmp short do0start db "divide error!" do0start: mov ax,cs mov ds,ax mov si,202h ;设置ds:si指向字符串 mov ax,0b800h mov es,ax mov di,12*160+36*2 mov cx,13 ;字符长度为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
测试代码如下
assume cs:code code segment start: mov ax,1000h mov bh,1 div bh code ends end start