AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > 汇编语言

GET TIME OF DAY(获取时间)

51自学网 http://www.51zixue.net

INTRODUCTION

The first example is of a program that uses the system time of day. This example uses a conditional assembly to decide between two ways to get the time of day. One way is to use the DOS time of day function; the other way, illustrated by the second code example, uses the BIOS time of day function. The second example can be used to replace the standard DOS call to get the time of day. This second example will return the time of day much faster than the standard DOS call.

FIRST EXAMPLE

This example runs until a set time of day occurs and then terminates. This code gets the time of day information from the DOS command line input data. If there is bad input data, then an error message is displayed, informing the user what the correct input data format is. While the program is waiting for the terminate time, it will scan the keyboard for an escape key to terminate the program on user demand.

; Wait for Time;This program can be executed inside of a .BAT file to;  stall execution of the .BAT file until a set time of day;?????????????????????????????????????????????????????????? ???;conditional assembly flag, 0 to use DOS, 1 to use BIOS example.MODEL tinyuse_bios_flag EQU 1;----------- stack area ---------------.STACK 500;--------------------------------------.CODE;*************  @@@@@@@@@@@@@@  ***************start   proc    near        mov     bx,80H        ;index command line data        mov     al,[bx]       ;get size of string variable        mov     ax,cs        mov     ds,ax         ;reset data segment        mov     psp_seg,es    ;save PSP address        mov     es,ax         ;reset extra segment        cmp     al,4          ;is there data in string        jb      exit_bad      ;branch if no data        inc     bx        inc     bx            ;point to start of data      ;get number out of buffer area        call    get_number        jc      exit_bad      ;branch if number bad        mov     wait_hour,al  ;save number in hour        cmp     al,23         ;?? number too large ??        ja      exit_bad      ;branch is too large      ;check the number terminating character        cmp     ah,":"        jne     exit_bad      ;branch if not :      ;point to start of next number        inc     bx      ;get next number out of buffer area        call    get_number        jc      exit_bad      ;branch if number bad        cmp     al,59         ;?? number too large ??        ja      exit_bad      ;branch if too large        mov     wait_minute,al     ;save number to minute   ;display executing wait message        mov     ah,9        ;set DOS function number        lea     dx,wait_message        int     21H         ;DOS call to display message;________________________________;**********  !!!!!!!!  **********wait_loop:      ;scan keyboard for keys        mov     ah,1        int     16H        jz      wait_no_key     ;branch if no key        mov     ah,0            ;if here then keyboard data        int     16H             ;get key code from buffer        cmp     ax,3B00H        ;check key code        je      exit            ;branch if exit key        cmp     al,1BH          ;check for ESC key        je      exit            ;branch if ESC keywait_no_key:   ;find out what time it is;conditional assembly ????????????????????      ;use this code if linking to code in this sectionIF use_bios_flag        call    get_time_of_day      ;else use this code if calling DOS for timeELSE        mov     ah,2CH        int     21H             ;get current time of dayENDIF        cmp     ch,wait_hour        jne     wait_loop       ;loop if not time        cmp     cl,wait_minute        jne     wait_loop       ;loop if not time;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^exit:        mov     ah,4CH        int     21h             ;terminate program;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!exit_bad:        mov     ah,9        lea     dx,exit_bad_message        int     21H             ;DOS call to display message        jmp     exit;  ***** ^^^^^^^^ ***** ^^^^^^^^ ****get_number: ;on entry BX indexes ASCII number data in PSP segment area ;on exit if carry clear,  ; register AL has binary number, from 0 to 99  ; BX indexes past the number,  ; AH has exiting character code indexed by BX     push ds     mov  ds,psp_seg     mov  al,[bx]     inc  bx     call number_check     jc   get_number_bad     mov  ah,al     mov  al,[bx]     call number_check     jc   get_number_1get_number_2a:     cmp  ah,0     je   get_number_2     add  al,10     dec  ah     jmp  get_number_2aget_number_2:     inc  bx     mov  ah,al     mov  al,[bx]get_number_1:     cmp  al,":"     je   get_number_1a     cmp  al,0DH     jne  get_number_badget_number_1a:     xchg al,ah     pop  ds     clc       ;set good number flag     retget_number_bad:     pop  ds     stc       ;set bad number flag     ret;#################################################number_check:   ;this code checks for ASCII number in AL    ; if it finds a number, then it makes it binary    ; and returns with carry clear, else carry set     cmp  al,"0"     jb   number_bad     cmp  al,"9"     ja   number_bad     and  al,0FH     clc     ret     stc     ret;*************************start     endp;+++ this routine combines data and code into one segment +++; define data areapsp_seg         dw      0wait_hour       db      0wait_minute     db      0wait_message    db     0DH,0AH,0DH,0AH        db   "Wait in progress, Press [ESC] to exit",0DH,0AH                db      "$"exit_bad_message        db      0DH,0AH        db   "To use TimeWait program enter timeout data "        db   "from command line as example:",0DH,0AH,0DH,0AH        db     "TimeWait 11:30",0DH,0AH,0DH,0AH        db     "Note, timeout hours vary from 0 to 23, "        db     "and minutes from 0 to 59.",0DH,0AH        db     "$";______________________________________     end  start

 

 

 
上一篇:MAKE SOUNDS (发声)  下一篇:PRINT FILE PROGRAM (打印文件)