汇编网首页登录博客注册
youthangel的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
文章收藏

[2012-10-18 22:12] 实验十三

这三道题的套路基本一样,思路很明确。所以注释就没写那么详细
(1)
              assume    cs:code
        data  segment
              db        "welcome to masm!",0
        data  ends
        code  segment
      start:
;安装程序
              mov       ax,cs
              mov       ds,ax
              mov       si,offset begin
              mov       ax,0
              mov       es,ax
              mov       di,200h
              mov       cx,offset over - offset begin
              cld
              rep       movsb
;修改中断向量表
              mov       ax,0
              mov       ds,ax
              mov       bx,7ch*4
              mov       ax,200h
              mov       [bx],ax
              mov       ax,0
              mov       [bx+2],ax
;测试程序      
              mov       dh,10
              mov       dl,10
              mov       cl,2
              mov       ax,data
              mov       ds,ax
              mov       si,0
              int       7ch
;暂停
              mov       ah,1
              int       21h
;退出          
              mov       ax,4c00h
              int       21h
      begin:
;保护现场      
              push      es
              push      ax
              push      di
              
              mov       ax,0b800h
              mov       es,ax
;计算位置
              mov       al,160
              mul       dh
              shl       dl,1
              mov       dh,0
              add       ax,dx
              mov       di,ax       ;di指向显示位置
;开始显示
          s:
              mov       al,[si]
              cmp       al,0
              je        s0
              mov       es:[di],al
              mov       es:[di+1],cl
              inc       si
              add       di,2
              jmp       s
         s0:
;恢复现场,返回 
              pop       di
              pop       ax
              pop       es
              iret
       over:  nop
        code  ends
              end       start
(2)
              assume    cs:code
        code  segment
      start:
              mov       ax,cs
              mov       ds,ax
              mov       si,offset begin
              mov       ax,0
              mov       es,ax
              mov       di,200h
              mov       cx,offset over - offset begin
              cld
              rep       movsb
;修改向量表
              mov       ax,0
              mov       ds,ax
              mov       bx,7ch*4
              mov       ax,200h
              mov       [bx],ax
              mov       ax,0
              mov       [bx+2],ax
;测试程序      
              mov       ax,0b800h
              mov       es,ax
              mov       di,160*12
              mov       bx,offset s - offset se
              mov       cx,80
          s:
              mov       byte ptr es:[di],'!'
              mov       byte ptr es:[di+1],2
              add       di,2
              int       7ch
         se:  nop
;暂停
              mov       ah,1
              int       21h
;退出
              mov       ax,4c00h
              int       21h
;中断处理程序 
      begin:
              push      bp
              mov       bp,sp
              dec       cx
              jcxz      return
              add       [bp+2],bx
     return:
              pop       bp
              iret
       over:  nop
        code  ends
              end       start
(3)
     comment            ;
在开始的4行制作了一个表格,好比图书馆的书架
用s列和row列做了一个查询表,还比图书管理员手里的书单,记录每一本书的位置 
;  
              assume    cs:code
        code  segment
         s1:  db        'Good,better,best,','$'
         s2:  db        'Neber 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       ah,1
              int       21h
;退出
              mov       ax,4c00h
              int       21h
        code  ends
              end       start
评论次数(1)  |  浏览次数(235)  |  类型(汇编作业) |  收藏此文  | 

[  fpamc   发表于  2012-10-19 10:04  ]

对的

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码