home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / library / datetime / cmosdate / date_is.asm next >
Assembly Source File  |  1992-12-01  |  5KB  |  102 lines

  1. ;; DATE_IS.ASM - simple CMOS date display program.
  2. ;;
  3. ;; This program can be assembled using the A86 or TASM assemblers 
  4. ;;
  5. ;; Not tested with Masm, should work?
  6. ;;
  7. ;; This code is "PUBLIC DOMAIN"
  8. ;;
  9. ;; by William Cravener 11/28/92
  10. ;;
  11. ;---------------------------------------------------------
  12. ;;
  13. code                    SEGMENT
  14. ASSUME          cs:code, ds:code, es:code, ss:code
  15. ORG             100h                    ; COM files begin here
  16. start:
  17.         jmp     date                    ; go show the current system date
  18. ;;
  19. ;;==========================================================================
  20. ;;
  21. say_date                DB      0dh, 0ah, 'Date is '
  22. table                   DB      '00-00-0000', 0dh, 0ah
  23. ;;
  24. ;;==========================================================================
  25. ;;  retrieve and display date
  26. date:
  27.         mov     ah, 4                   ; function 4
  28.         int     1ah                     ; BIO's get CMOS date
  29.         push    dx                      ; save MONTH and DAY 
  30.         push    cx                      ; save CENTURY
  31.         mov     al, cl                  ; CL = YEAR/unpack_bcd uses AL
  32.         call    unpack_bcd              ; go upack BCD
  33.                                         ; result returned in AL
  34.         call    make_it_ascii           ; make em ASCII characters
  35.         mov     [table+8], al           ; store upper 
  36.         mov     [table+9], ah           ; store lower
  37.         pop     cx                      ; retrieve CENTURY
  38.         mov     al, ch                  ; CH = CENTURY/unpack_bcd uses AL
  39.         call    unpack_bcd              ; go upack BCD
  40.                                         ; result returned in AL
  41.         call    make_it_ascii           ; make em ASCII characters
  42.         mov     [table+6], al           ; store upper 
  43.         mov     [table+7], ah           ; store lower
  44.         pop     dx                      ; retrieve DAY
  45.         push    dx                      ; save MONTH 
  46.         mov     al, dl                  ; DL = DAY/unpack_bcd uses AL
  47.         call    unpack_bcd              ; go upack BCD
  48.                                         ; result returned in AL
  49.         call    make_it_ascii           ; make em ASCII characters
  50.         mov     [table+3], al           ; store upper 
  51.         mov     [table+4], ah           ; store lower
  52.         pop     dx                      ; retrieve MONTH
  53.         mov     al, dh                  ; DH = MONTH/unpack_bcd uses AL
  54.         call    unpack_bcd              ; go upack BCD
  55.                                         ; result returned in AL
  56.         call    make_it_ascii           ; make em ASCII characters
  57.         mov     [table+0], al           ; store upper 
  58.         mov     [table+1], ah           ; store lower
  59. ;;
  60.         mov     si, OFFSET say_date     ; point to "Date is"
  61.         mov     ah, 0eh                 ; use BIO's teletype service
  62.         mov     bh, 0                   ; page 0
  63.         mov     cx, 10                  ; 10 characters
  64. loop1:
  65.         lodsb                           ; get character
  66.         int     10h                     ; BIO's interrupt
  67.         loop    loop1                   ; all 10 characters
  68. ;;
  69.         mov     si, OFFSET table        ; point to date table
  70.         mov     ah, 0eh                 ; use BIO's teletype service
  71.         mov     bh, 0                   ; page 0
  72.         mov     cx, 12                  ; 12 characters
  73. loop2:
  74.         lodsb                           ; get character
  75.         int     10h                     ; BIO's interrupt
  76.         loop    loop2                   ; all 12 characters
  77.  
  78.         int     20h                     ; exit to DOS
  79. ;---------------------------------
  80. ; unpacked binary result returned in AL
  81. unpack_bcd:
  82.         mov     ch, al                  ; save low digit in CH
  83.         and     ch, 0fh                 ; by clearing the high
  84.         mov     cl, 4                   ; shift high digit
  85.         shr     al, cl                  ; to low bits
  86.         mov     cl, 0ah                 ; and multiply by 10
  87.         mul     cl                      ; multiply
  88.         add     al, ch                  ; add the digits
  89.         ret
  90. ;---------------------------------
  91. make_it_ascii:
  92. ; binary value in AL
  93.         xor     ah, ah                  ; zero out AH
  94.         mov     cl, 0ah                 ; divide
  95.         div     cl                      ; by 10
  96.         add     al, 30h                 ; make it a
  97.         add     ah, 30h                 ; ASCII value
  98.         ret
  99. ;---------------------------------
  100. code                    ENDS
  101. END             start
  102.