实验十三_编写、应用中断例程_ 1

编写并安装int 7ch中断例程,功能为显示一个用0结束的字符串,中断例程安装在0:200处
参数:(dh)= 行号,(dl)= 列号,(cl)= 颜色,ds:si指向字符串首地址
以上中断例程安装成功后,对下面的程序进行单步跟踪,尤其注意观察int、iret指令执行前后cs、ip和栈中的状态
assume cs:code 
data segment 
   db "welcome to masm!",0 
data ends 
code segment 
start:  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 
code ends  
end start  
;------------int 7ch中断例程安装------------------------------------ 
assume cs:code  
code segment 
start:        mov ax,cs 
        mov ds,ax 
        mov si,offset disp        ;设置ds:si指向源地址 
        mov ax,0 
        mov es,ax 
        mov di,200h                ;设置es:di指向目的地址 
        mov cx,offset dispend - offset disp;设置cx为传输长度 
        cld 
        rep movsb 

        mov ax,0                ;设置中断向量表 
        mov es,ax 
        mov es:[7ch*4],200h 
        mov es:[7ch*4+2],0         

        mov ax,4c00h 
        int 21h 
         
disp:   push ax 
        push cx 
        push es 
        push si 
        push di 
         
        mov ax,0b800h 
        mov es,ax 
        mov al,160 
        dec dh 
        mul dh 
        dec dl 
        add dl,dl 
        mov dh,0 
        add ax,dx 
        mov di,ax                ;设置es:di指向显存空间要求位置 
         
    s:  mov al,ds:[si] 
        cmp al,0 
        je ok 
        mov es:[di],al 
        mov es:[di+1],cl 
        inc si 
        add di,2 
        jmp short s 
     
    ok: pop di 
        pop si 
        pop es 
        pop cx 
        pop ax 
        iret 
dispend:nop 
code ends 
end start

原文地址:https://www.cnblogs.com/xpjiang/p/4524433.html