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

我的博客

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

[2013-03-06 19:52] 实验14(动态显示)

assume cs:code 

data segment
  db 9,8,7,4,2,0           ;将年、月、日、时、分、秒在COMS RAM内的存放单元地址号依次放入数据段
  db 32 dup (0)            ;开辟数据段,用于存放从COMS RAM内读出的时间信息
data ends

stack segment
  dw 8 dup (0)
stack ends

code segment
start:      mov ax,data
            mov ds,ax
            mov si,0                   ;ds:si指向时间在COMS RAM内的存放单元地址号;inc si可依次指向这些地址号
            mov ax,stack
            mov ss,ax
            mov sp,16                  ;设置栈段

xh:         mov cx,3                   ;此循环依次读出年、月、日
            mov bx,6                   ;设置存放读出的时间信息内容的首地址
time0:      call duank                 ;跳到将时间信息读出并变为ASC码的子程序执行
            mov [bx],ah
            mov [bx+1],al              ;时间的十位和个位依次放入字节
            mov byte ptr [bx+2],2fh    ;年、月、日的间隔为“/”
            inc si                     ;指向下一个时间存放地址号
            add bx,3                   ; 指向存放下一个读出的时间信息的首地址                
            loop time0

            dec bx
            mov byte ptr [bx], 20h     ;将日后的“/”去除,用空格代替,同时作为年月日和时分秒之间设置的一个空格
            inc bx
              
            mov cx,3                   ;此循环依次读出时、分、秒
time1:      call duank
            mov [bx],ah
            mov [bx+1],al
            mov byte ptr [bx+2],3ah    ;时、分、秒的间隔为“:”
            inc si
            add bx,3
            loop time1

            dec bx
            mov byte ptr [bx],24h      ;将秒后的“:”去除,用“$”代替,同时“$”为21h号中断例程的9号子程序的字符串显示的结束符

            mov ah,2
            mov bh,0
            mov dh,10
            mov dl,12
            int 10h               ;调用10h号中断例程的2号子程序,功能为设置光标位置
            
            mov dx,6
            mov ah,9
            int 21h               ;调用21h号中断例程的9号子程序,功能为在光标位置显示字符串;ds:bx指向字符串的首地址

            call relay            ;调用延时显示子程序
            mov si,0              
            jmp near ptr xh       ;重新执行显示程序。

            mov ax,4c00h
            int 21h

relay:      push cx               ;延时子程序,相当于软件执行12*5000*5000次循环后,再执行显示程序,使时间显示不至于快速变化。
            push ax  
            mov cx,12   
re0:        push cx
            mov cx,5000
re1:        push cx
            mov cx,5000
re2:        mov ax,2
            mov ax,1
            add ax,ax
            loop re2
            pop cx
            loop re1
            pop cx
            loop re0
            pop ax
            pop cx
            ret

duank:      push cx               ;将时间信息读出并变为ASC码的子程序
            mov al,[si]
            out 70h,al
            in al,71h             
            mov ah,al
            mov cl,4
            shr ah,cl
            and al,00001111b
            add ah,30h
            add al,30h
            pop cx
            ret

code ends
end start
评论次数(0)  |  浏览次数(417)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码