王爽《汇编语言》实验13

(1)、编写并安装int 7ch中断例程,功能为显示一个用0结束的字符串,中断例程安装在0:200处
           参数:(dh)=行号,(dl)=列号,(cl)=颜色,ds:si指向字符串首地址。

参考代码(名为t11.asm):

assume cs:codesg

codesg segment
  beign: mov ax,cs
         mov ds,ax
         mov si,offset show_str

         mov ax,0
         mov es,ax
         mov di,200

         mov cx, offset show_end - offset show_str
         cld
         rep movsb                    ; 安装自定义中断程序于内存单元的0000:200处

         mov word ptr es:[7ch*4],200
         mov word ptr es:[7ch*4+2],0  ; 注册7cH号中断的处理程序入口地址 

         mov ax,4c00h
         int 21h

show_str: push ax
          push es
          push di
          push cx
          push bx

          mov ax,0B800H
          mov es,ax
          mov di,0
          
          mov al,160
          mul dh
          add di,ax                  ; 计算显存行号偏移地址

          mov al,2
          mul dl
          add di,ax                  ; 计算显存列号偏移地址

          mov bl,cl                  ; 保存颜色值

       s: mov cl,[si]
          mov ch,0
          jcxz ok
          mov es:[di],cl
          mov es:[di+1],bl
          add di,2
          inc si
          jmp short s
      ok: pop dx
          pop cx
          pop di
          pop es
          pop ax
          iret                       ; 退出中断处理程序
show_end: nop
codesg ends
end beign

对应给出的测试触发中断程序如下(名为t1101.asm):

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

运行结果图:

MS-DOS-2012-09-12-15-53-26

(2)、编写并安装int 7ch中断例程,功能为完成loop指令的功能。
           参数:(CX)=循环次数,(BX)=位移

参考代码(名为t12.asm):

assume cs:codesg

codesg segment
   start: mov ax,cs
          mov ds,ax
          mov si,offset lp

          mov ax,0
          mov es,ax
          mov di,200

          mov cx, offset lpend - offset lp
          cld
          rep movsb                     ; 安装中断处理程序

          mov word ptr es:[7ch*4],200
          mov word ptr es:[7ch*4+2],0   ; 注册中断处理程序

          mov ax,4c00h
          int 21h

      lp: push bp
          dec cx
          jcxz ok

          mov bp,sp
          add [bp+2],bx     ;  将IP指向标记处

      ok: pop bp
          iret
   lpend: nop
codesg ends
end start

对应给出的测试触发中断程序如下(名为t1201.asm):

assume cs:code
code segment
  start: mov ax,0b800H
         mov es,ax
         mov di,160*12
         mov bx,offset s - offset se    ; 设置从标号se到标号s的转移位移
         mov cx,80
      s: mov byte ptr es:[di], '!'
         add di,2
         int 7ch
     se: nop
         mov ax,4c00h
         int 21h
code ends
end start

运行结果图:

MS-DOS-2012-09-12-16-21-41

(3)、分别在屏幕的第2、4、6、8行显示四句英文诗,补全程序。

参考答案:

assume cs:code
code segment
  s1: db 'Good,btter,best,','$'
  s2: db 'Nerver let it rest,','$'
  s3: db 'Till good is better,','$'
  s4: db 'And better,best.','$'
  s: dw offset s1, offset s2, offset s3, offset s4
  row: db 2,4,6,8

  start: mov ax,cs
         mov ds,ax
         mov bx,offset s
         mov si,offset row
         mov cx,4
     ok: mov bh,0
         mov dh,[si]              ; 设置行
         mov dl,0
         mov ah,2
         int 10h

         mov dx,[bx]              ; 设置待显示字符串的偏移地址
         mov ah,9
         int 21h

         inc si                   ; 设置下一行的地址索引
         add bx,2                 ; 设置下一个显示字符的偏移地址

         loop ok

         mov ax,4c00h
         int 21H
code ends
end start

运行结果图:

MS-DOS-2012-09-12-16-44-19

转载于:https://my.oschina.net/websoft/blog/78174

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值