中断例程
===========================
===========================
;安装7ch中断,完成loop功能(cx=循环变量,bx=位移)
assume cs:code
code segment
start:
mov ax,cx
mov ds,ax ;设ds
mov si,offset do7c ;设si
mov ax,20h
mov es,ax ;设es
mov di,0h ;设di
mov cx,offset do7cEnd - offset do7c ;设cx
cld ;设df
rep movsb ;安装
;============================================================================
mov ax,0
mov es,ax
mov es:[7ch*4],word ptr 0
mov es:[7ch*4+2],word ptr 20h ;设中断向量
mov ax,4c00h
int 21h ;回dos
;============================================================================
do7c:
push bp
;==========================================================
mov bp,sp ;完成loop功能(参数cx=循环次数,bx=位移量)
dec cx ;loop先自减一再判断是否为0
jcxz ok ;为零退出
add [bp+2],bx ;不为零用位移+ss中压入的ip位置传入ip
ok: pop bp
iret ;回到调用处
do7cEnd:
nop
code ends
end start
接口程序
============================
============================
assume cs:code
code segment
start:
mov ax,0b800h
mov es,ax
mov di,160*12
mov bx,offset s - offset se
mov cx,80
s: mov byte ptr es:[di],'!'
add di,2
int 7ch
;loop s
se: nop
mov ax,4c00h
int 21h
code ends
end start
;调用7ch后,程序跳到了别的地方,不知道为什么,中断向量没有错,但0:200的指令不知道为什么出的来很奇怪,请大家帮我看一下 |