assume cs:code
data segment
db "welcome to masm!",0
data ends
code segment
start:
mov ax,cs
mov ds,ax
mov si,offset no7c
mov ax,0
mov es,ax
mov di,200h
mov cx,offset no7cend-offset no7c
cld
rep movsb ;此9句为安装中断例程
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0 ;此2句为设置中断向量
mov dh,10 ;行号
mov dl,10 ;列号
mov cl,2 ;颜色属性
mov ax,data
mov ds,ax
mov si,0
int 7ch ;调用中断例程
mov ax,4c00h
int 21h
no7c: push ax ;定义中断例程[开始]
push bx
push di
mov bx,0b800h
mov es,bx
mov al,160d
mul dh
mov di,ax
mov al,2 ;此6句为确定符合题意的显存的偏移地址,
mul dl ;不可用"mov di,160*dh+2*dl"试图达到此6句指令的功能。
add di,ax
mov bl,cl
again: mov cx,[si]
jcxz no7cret
mov es:[di],cl
mov es:[di+1],bl
inc si
add di,2
jmp short again
no7cret: pop di
pop bx
pop ax
iret
no7cend: nop ;定义中断例程[结束]
code ends
end start
提问:no7c开始处, push ax
push bx
push di是对程序安装时和和下面调用 程序时都用到的ax,bx,和di进行一下保存把,但是调用程序时用到了es,但是由于程序安装时没有用到这个寄存器,所以就不用保存了吗,不知道我的理解对吗,希望指点
还有就是,程序已经安装完了 这时候就算调用程序的时候改变了ax,bx,和di的值也应该没什么问题,我调试的时候去掉了,也能成功运行,不知道着三句写上后,有什么好处,指点下 |