【汇编语言】by王爽 | 实验13:编写、应用中断程序

前言:本实验为王爽老师的《汇编语言》第三版中的实验13(p262)

实验环境:DOSBox 0.74-3

实验任务:

        (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

中断程序安装代码:

assume cs:code

code segment
start: ;安装7ch中断例程
       mov ax,cs
       mov ds,ax
       mov si,offset do7ch
       mov ax,0
       mov es,ax
       mov di,200h
       mov cx,offset do7chend - offset do7ch
       cld
       rep movsb

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

       mov ax,4c00h
       int 21h

do7ch: push ax
       push es
       push dx
       push di
       push cx
       push si
       ;将程序使用到的寄存器入栈保存
       
       mov ax,0b800h
       mov es,ax
       mov al,160
       mul dh  ;160 x 行号 
       add al,dl  ;160 x 行号 + 列号
       adc ah,0
       mov di,ax  ;di为字符显示位置
       ;es:di指向字符显示位置
 
    s: mov al,[si]
       cmp al,0
       je ok  ;为0则字符串结束
       mov es:[di],al
       mov es:[di+1],cl
       inc si
       add di,2
       jmp short s

   ok: pop si 
       pop cx
       pop di
       pop dx
       pop es
       pop ax
       ;恢复寄存器原始值
       
       iret

       mov ax,4c00h
       int 21h

do7chend: nop

code ends
end start

测试程序运行结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值