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

我的博客

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

[2011-05-13 00:10] 自制数字时钟 需要按alt+enter 开启全屏才能有闪烁效果

图片载入中
assume cs:code
code segment
setting:mov ax,cs
        mov ds,ax
        mov si,offset my_time

        mov ax,20h
        mov es,ax
        mov di,0

        mov cx,offset end_time-offset my_time
        cld
        rep movsb

        mov ax,0
        mov es,ax
        mov word ptr es:[4*7ch],0
        mov word ptr es:[4*7ch+2],20h
;================================================
        mov ax,0b800h
        mov es,ax
        mov al,'/'
        mov ah,00011100b
        mov es:[12*0a0h+32*2],al
        mov es:[12*0a0h+32*2+1],ah
        mov es:[12*0a0h+38*2],al
        mov es:[12*0a0h+38*2+1],ah
        mov byte ptr es:[12*0a0h+44*2],'-'
        mov byte ptr es:[12*0a0h+44*2+1],ah
        mov al,':'
        mov es:[12*0a0h+50*2],al
        mov es:[12*0a0h+50*2+1],ah
        mov ah,10011100b
        mov es:[12*0a0h+56*2],al
        mov es:[12*0a0h+56*2+1],ah

        mov dl,61   
        ;若果di初始化的值小于等于60,那么第一次判断很可能执行je start来再次循环读取判断,因为秒数不可能超过60 所以这里设置61
start:mov al,0
        out 70h,al
        in al,71h
        cmp al,dl
        je start

        mov dl,al
        call conversion
        mov dh,58
        mov cl,00011100b
        int 7ch

        mov al,2
        out 70h,al
        in al,71h
        call conversion
        mov dh,52
        mov cl,00011100b
        int 7ch

        mov al,4
        out 70h,al
        in al,71h
        call conversion
        mov dh,46
        mov cl,00011100b
        int 7ch

        mov al,7
        out 70h,al
        in al,71h
        call conversion
        mov dh,40
        mov cl,00011100b
        int 7ch

        mov al,8
        out 70h,al
        in al,71h
        call conversion
        mov dh,34
        mov cl,00011100b
        int 7ch

        mov al,9
        out 70h,al
        in al,71h
        call conversion
        mov dh,28
        mov cl,00011100b
        int 7ch
        jmp start


;================================================
my_time:push ax
        mov al,dh
        mov bl,2
        mul bl
        mov bx,ax
        mov al,12
        mov ch,0a0h
        mul ch
        add bx,ax
        mov ax,0b800h
        mov es,ax
        pop ax
        mov es:[bx],ah
        mov es:[bx+1],cl
        mov es:[bx+2],al
        mov es:[bx+3],cl
        iret
end_time:nop

conversion:push cx
        mov ah,al
        mov cl,4
        shr ah,cl
        and al,00001111b
        add ah,30h
        add al,30h
        pop cx
        ret
code ends
end setting
;==============================================
;只要把上面的源码编译链接后就能运行了
;运用了7ch中断显示和子程序转换
评论次数(0)  |  浏览次数(505)  |  类型(我的代码) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码