实现int的功能
assume cs:code,ss:stackstack 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,ax ;47号中断入口高位字放0
;mov ax,200h
mov es:,word ptr 200h;47号中断入口低位字放200
;----把47号中断程序存入0:200h处----
mov cx,offset int47end - offset int47 ;中断程序长度
mov ax,cs
mov ds,ax ;因为中断程序在代码段中,源段地址设置为cs的地址
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,bx配合--bp+2存放的
mov cx,50h ;是ip,当iret时,回跳的距离
prn:
mov es:,byte ptr '!'
add di,2
int 47h
lprn:
nop
mov ax,4c00h
int 21h
;----中断实现程序:功能相当于loop----
int47:
push bp
mov bp,sp
dec cx
jcxz int47i
add ,bx
int47i:
pop bp
iret
int47end:nop
code ends
end start
很好的主意,考验腾挪 {:10_249:}{:10_249:}
页:
[1]