您的位置:首页 > 其它

实验13(1)

2009-09-10 19:48 417 查看
题目:编写并安装Int 7ch中端例程,功能为显示一个用0结束的字符串,中断例程安装在0000:0200h处

参数:(dh)=行号,(dl)=列号,(cl)=颜色,ds:si指向字符串的首地址。

以上中断例程安装成功后,对下面的程序进行单步跟踪,尤其注意int、iret指令执行前后的cs、ip和栈中的状态。



assume cs:codesg  
datasg segment
    db "welcome to masm! ",0
datasg ends

codesg segment
    start: 
    mov ax,cs
    mov ds,ax
    mov si,offset show_s
    
    mov ax,0
    mov es,ax
    mov di,0200h
    
    mov cx,offset show_e - offset show_s
    cld 
    rep movsb;以上程序是复制中断例程的代码到0000:0200处
    
    mov word ptr es:[7ch*4],0200h
    mov word ptr es:[7ch*4+2],0;设置中断向量表项

    mov dh,10;行号
    mov dl,10;列号
    mov cl,2;颜色属性值
    mov ax,datasg
    mov ds,ax
    mov si,0;设置ds:si指向字符串开始处
    int 7ch
    

    mov ax,4c00h              
    int 21h
  
;中断例程的对应代码  
show_s: 
    push cx
    push ax
    push es
    push di
    push ds
    push si
    push dx
    
    mov ax,0b800h
    mov es,ax 
    
    add dl,dl
    mov ax,0
    mov al,160
    mul dh 
    mov dh,0
    add ax,dx
    mov di,ax;这里是根据dl(列号)和dh(行号)算出
               ;es:di的开始地址
    
;显示字符串的关键代码   
show:
    mov dx, cx
    mov ch,0 
    mov al,ds:[si]
    mov cl,al
    jcxz ok
    mov cx,dx
    mov ah,cl
    mov es:[di],ax
    inc si
    add di,2
    jmp short show
    
 ok:pop dx
    pop si
    pop ds
    pop di
    pop es
    pop ax
    pop cx
    iret
show_e:nop    

codesg ends
end start
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: