erh 发表于 2017-6-22 20:11:49

实现int的功能

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,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


很好的主意,考验腾挪

mmdn 发表于 2017-12-17 17:21:28

{:10_249:}{:10_249:}
页: [1]
查看完整版本: 实现int的功能