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

我的博客

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

[2012-10-18 22:14] 实验十四

comment            ;
1、从cmos中取出一个
2、转换成十进制,放入临时存储段
3、循环6次
4、一次显示所有  
;   
可以动态显示时钟的                  
              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       movsw
;修改中断向量表
              mov       ax,0
              mov       ds,ax
              mov       bx,1ch*4
              mov       ax,200h
              mov       [bx],ax
              mov       ax,0
              mov       [bx+2],ax
;退出
              mov       ax,4c00h
              int       21h
      begin:
              push      ax
              push      bx
              push      cx
              push      ds
              push      si
              push      es
              push      di
              push      bp          ;保护现场
              
              jmp       ok
        data  segment
              db        9,8,7,4,2,0 ;单元地址
       temp:  dw        8 dup(0)
        data  ends
         ok:
              mov       ax,data
              mov       ds,ax
              mov       si,0
              lea       bx,temp
              mov       bp,0
              mov       cx,6
;从端口里取数据,转换后放入temp里              
          s:
              mov       al,[si]
              out       70h,al
              in        al,71h
              mov       ah,al
              
              and       ah,00001111b
              push      cx
              mov       cl,4
              shr       al,cl
              pop       cx
              
              mov       [bx],ax
              cmp       bp,2
              jb        g           ;/
              ja        d           ;:
              mov       al,-10h
              jmp       c
          g:  mov       al,'/'-30h
              jmp       c
          d:  mov       al,':'-30h
              jmp       c
          c:
              mov       [bx+2],al
              inc       si
              inc       bp
              add       bx,3
              loop      s
              mov       ax,'$'      ;结束标志
              mov       [bx],ax
              
;从temp里取出数据显示,遇到$结束             
              lea       bx,temp
              mov       ax,0b800h
              mov       es,ax
              mov       di,120
         s0:
              mov       al,[bx]
              cmp       al,'$'
              je        return
              add       al,30h
              mov       es:[di],al
              mov       al,2
              mov       es:[di+1],al
              inc       bx
              add       di,2
              loop      s0
     return:
              mov       al,20h
              mov       es:[di-2],al
              pop       bp
              pop       di          ;恢复现场
              pop       es
              pop       si
              pop       ds
              pop       cx
              pop       bx
              pop       ax
              iret
       over:  nop
        code  ends
              end       start
评论次数(7)  |  浏览次数(269)  |  类型(汇编作业) |  收藏此文  | 

[  fpamc   发表于  2012-10-19 09:39  ]

mov       al,-10h
请问这个干嘛用的?

还有下边两个分割符。后边你的注释没加分号。

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

这道题不用做成中断安装程序的

[  youthangel   发表于  2012-10-19 14:37  ]

写成mov al,-10h,是因为下面还要 add al,30h
20h是空格的ASCII。分隔符?是分割年月日、时分秒的
如果不做成中断,很难实现动态显示的。至少cpu的使用率很难低于%80,你把程序拷下来,运行一下就知道了

[  fpamc   发表于  2012-10-19 22:21  ]

动态有很多方法的。你可以看看我的哈,

[  youthangel   发表于  2012-10-20 08:18  ]

我看你是毛病又犯了,天大地大,代码我的最优化!好吧,我先去看看

[  fpamc   发表于  2012-10-21 07:40  ]

我才看到。你把定时器中断的地址给占用了,所以会自动运行。但是你并没有回调原中断。这样会有错误的。你先慢慢学。如果你有兴趣,学完了可以看看我博客首页的七夕程序,里面有一个功能是通过定时中断实现延时。里面还有我收集的手册什么的哈。

[  youthangel   发表于  2012-10-21 08:51  ]

不会啊,因为我用的是1ch的中断入口。这个入口就是给程序人员用的。你可以参考一下bios\dos中断参考手册(随便百度一下就行)

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