首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > 汇编语言 > 汇编 实时显示系统时间 年月日信息
【标  题】:汇编 实时显示系统时间 年月日信息
【关键字】:
【来  源】:http://blog.csdn.net/pfboy/archive/2007/04/03/1550430.aspx

汇编 实时显示系统时间 年月日信息

编写一个程序,在屏幕上实时地显示日期和时间(例如:2007-4-12 153258显示为332:20 P.M. Saturday,April 12,2007)直到任意一个键被按下才退出程序。 

 
showyear macro char
 push ax
 push si
 push cx
 push dx
 push bx
 push di
        mov     ax,char
        mov     si, offset divisors
        mov     di, offset results                    
        mov     cx,5  
aa:
        mov     dx,0           
        div     word ptr [si]   ;除法指令的被除数是隐含操作数,此处为dx:ax,商ax,余数dx
        add     al,48           ;商加上48即可得到相应数字的ASCII码
        mov     byte ptr [di],al       
        inc     di                               
        add     si,2                          
        mov     ax,dx                       
        loop    aa
        mov     cx,4   
        mov     di, offset results
bb:
        cmp     byte ptr [di],'0'   ;不输出前面的0字符   
        jne     print
        inc     di                          
        loop    bb
print:
        mov     dx,di                      
        mov     ah,9
        int     21h 
       
        pop di
        pop bx
        pop dx
        pop cx
        pop si
        pop ax
endm

DISP MACRO CHAR  ;显示字符
 PUSH AX
 PUSH DX
 
 MOV DL,CHAR 
 MOV AH,2
 INT 21H

 POP DX
 POP AX
ENDM

GETNUM MACRO CHAR ;显示数字
PUSH AX
PUSH DX
PUSH CX
 MOV AL,CHAR
 AAM
 MOV DH,AL
 MOV DL,AH
 OR DL,30H
 MOV AH,2
 INT 21H 
 
 MOV DL,DH
 OR DL,30H
 
 MOV AH,2
 INT 21H
POP CX
POP DX
POP AX
ENDM

GETWEEK MACRO CHAR   ;显示星期
 PUSH AX
 PUSH DX
 PUSH SI
 PUSH CX
 
 LEA SI,D_TAB

 MOV AL,CHAR
 XOR AH,AH
 MOV CX,AX
 LOOP1:INC SI
    INC SI
  LOOP LOOP1
 
 MOV DX,[SI]  
 MOV AH,9
 INT 21H
 
 POP CX
 POP SI
 POP DX
 POP AX
ENDM

GETMONTH MACRO CHAR   ;显示月份
 PUSH AX
 PUSH DX
 PUSH SI
 PUSH CX
 
 LEA SI,M_TAB

 MOV AL,CHAR
 DEC AL
 XOR AH,AH
 MOV CX,AX
 
 LOOP2:INC SI
    INC SI
  LOOP LOOP2
 
 MOV DX,[SI]  
 MOV AH,9
 INT 21H
 
 POP CX
 POP SI
 POP DX
 POP AX
ENDM

DATAS SEGMENT
 divisors        DW 10000, 1000, 100, 10, 1
 results          DB 0,0,0,0,0,"$"        ;存放五位数ASCII码
 BUF DB 'A$'
 BUF1 DB 'YUE$'
 
 D_TAB DW SUN,MON,TUE,WED,THU,FRI,SAT
 M_TAB DW JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DCE,TIM
 
 SUN DB 'Sunday$'
 MON DB 'Monday$'
 TUE DB 'Tuesday$'
 WED DB 'Wednesday$'
 THU DB 'Thursday$'
 FRI DB 'Friday$'
 SAT DB 'Saturday$'

 JAN DB 'January$'
 FEB DB 'February$'
 MAR DB 'March$'
 APR DB 'April$'
 MAY DB 'May$'
 JUN DB 'June$'
 JUL DB 'July$'
 AUG DB 'August$'
 SEP DB 'September$'
 OCT DB 'October$'
 NOV DB 'November$'
 DCE DB 'December$'
 TIM DB '.M. $'

DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
 
LLL:
mov ah,2
mov bh,0
mov dh,0
mov dl,0
int 10h


 MOV AH,2CH
 INT 21H
 GETNUM CH
 DISP 3AH
 GETNUM CL
 DISP 3AH
 GETNUM DH
 DISP 00H
 CMP CH,12
 JA P
 DISP 41H
 JMP A
P:  DISP 50H
A:  MOV DX,M_TAB+24
 MOV AH,9
 INT 21H
 
 MOV AH,2AH
 INT 21H

 GETWEEK AL 
 DISP 2CH  
 GETMONTH DH
 DISP 00H
 GETNUM DL 

 DISP 2CH 
 showyear CX 
 

 MOV AH,06H
 MOV DL,0FFH
 INT 21H
 JE LLL
  
    MOV AH,4CH
    INT 21H
CODES ENDS

    END START

学习8086机器指令:【上一篇】
汇编:把寄存器AX的十六进制数转换成十进制形式输出:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • 《A3》怎么快速练级
  • 程序员面试攻略
  • Good Enough Quality
  • DLL文件
  • 广州地铁局域网和城域网解决方案(13)
  • 外连接(第二部分)
  • The Google Story
  • Unix编程/应用问答中文版 ---14.一些小工具的使用 15.32-bit/64-bit相关问题
  • 我的ASP.NET AJAX控件——PopupNotificationExtender:实现OWA或Messenger样式的信息提示窗口
  • 我为flash狂2002-08-22, 05:44 PM是在哪里下的呢
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.