请教大家一个汇编中 中断子程序的问题
本程序功能为:当除法溢出时,产生0号中断信息,从而引发do0中断过程(子程序送入0:200H处),显示"overflow!"字符串。
assume cs:code
code segment
start: mov ax,cs
mov ds,ax
mov si,offset do0;设置ds:si指向源地址
mov ax,0
mov es,ax
mov di,200h;设置es:di指向目的地址
mov cx,offset do0end-offset do0;设置cx传输长度
cld;设置传输方向为正
rep movsb
mov ax,0;设置中断向量表
mov es,ax
mov word ptr es:[0*4],200h;为什么用es设置中断向量表呢?
mov word ptr es:[0*4+2],0
mov ax,4c00h
int 21h
do0:jmp short do0start
db"overflow!"
do0start:mov ax,cs
mov ds,ax
mov si,202h
mov ax,0b800h
mov es,ax
mov di,12*160+36*2;设置es:di指向显存空间的中间位置,这个地址怎么算出来的?
mov cx,9;设置cx为字符串长度
s:mov al,[si]
mov es:[di],al
inc si
add di,2
loop s
mov ax,4c00h
int 21h
do0end :nop;为什么加nop?
code ends
end start
//1 怎样用汇编申请内存?
//2程序是用记事本写成的,编译连接后,怎样触发中断?
//3 es:[di+idata],idata应该是16进制计算?
//4 程序中两次用到计数器cx
mov cx,offset do0end-offset do0;设置cx传输长度
mov cx,9;设置cx为字符串长度
是不是没有触发中断时前者把do0对应的二进制码送入内存0:200处(而此时的mov cx,9因为没有被触发,所以不会和mov cx,offset do0end-offset do0冲突),
//5 程序末尾为什么加nop do0end :nop
//6 mov si,202h 应该是指向字符串"overflow!"
do0start:mov ax,cs
mov ds,ax
mov si,202h
可否改成:mov si,offset(do0)+2