assume cs:code,ss:stack
stack segment
dw 8 dup(0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,10h
;----把存放47号中断的地址指向0:200h处----
mov ax,47h*4
mov di,ax
mov ax,0
mov es,ax
mov es:2[di],ax
;mov ax,200h
mov es:[di],word ptr 200h
;----把47号中断程序存入0:200h处----
mov cx,offset int47end - offset int47
mov ax,cs
mov ds,ax
mov si,offset word ptr int47
mov ax,0
mov es,ax
mov di,word ptr 200h
rep movsb
;----显示位置----
mov ax,0b800h
mov es,ax
mov ax,160*11+80
mov di,ax
;----显示80个!----
mov bx,offset prn - offset lprn ;跳转位置,跟add[bp+2],bx配合--bp+2存放的
mov cx,50h ;是ip,当iret时,回跳的距离
prn:
mov es:[di],byte ptr '!'
add di,2
int 47h
lprn:
nop
mov ax,4c00h
int 21h
;----中断实现程序----
int47:
push bp
mov bp,sp
dec cx
jcxz int47i
add [bp+2],bx
int47i:
pop bp
iret
int47end:nop
code ends
end start