Link to home
Start Free TrialLog in
Avatar of anelka_tm
anelka_tm

asked on

write stopwatch(count down) with Assembler

Hii, my project is "stopwatch(count down) with Assembler" i writed but it not working as well as i want, its'n give me error but not working properly. i writed it with TASM. thank you for your help...
CLRSCR MACRO
 
	  MOV AX,0600H
 
	  MOV BH,07
 
	  MOV CX,0
 
	  MOV DX,184FH
 
	  INT 10H
 
	  ENDM
 
;-----------------------
 
CURSOR MACRO ROW,COLUMN
 
	  MOV BH,0
 
	  MOV AH,02				    
 
	  MOV DH,ROW
 
	  MOV DL,COLUMN
 
	  INT 10H
 
	  ENDM
 
;-------------- ;--------------------
 
.MODEL SMALL
.STACK 64
 
.DATA
 
DATA_1  DB '---------     --------         --------     --------         --------     -------- $'
DATA_2  DB '|        |   |        |       |        |   |        |       |        |   |        |$'        
DATA_3  DB '|        |   |        |       |        |   |        |       |        |   |        |$'
DATA_4  DB '|        |   |        |       |        |   |        |       |        |   |        |$'
DATA_5  DB '|        |   |        |   :   |        |   |        |   :   |        |   |        |$'
DATA_6  DB '|        |   |        |       |        |   |        |       |        |   |        |$'
DATA_7  DB '|        |   |        |       |        |   |        |       |        |   |        |$'
DATA_8  DB '|        |   |        |       |        |   |        |       |        |   |        |$'
DATA_9  DB '---------     --------         --------     --------         --------     -------- $'
 
DATA_10 DB  'FOR STOP  PRESS S'
DATA_11 DB  'FOR START PRESS M'
DATA_12 DB  'FOR RESET PRESS R'  
    
HOUR DW 0, 
       
MINU DW 0, 
 
SECO DW 0, 
 
TIME  DW 0, '/'
 
BITIRDOLAR  DB  24H               ;$ ascii   
 
DB 64 DUP(?)        
                    
.CODE
 
MAIN :
 
      MOV AX,@DATA
	  
      MOV DS,AX
	  
      CLRSCR
 
MOV AH,09
MOV DX,OFFSET DATA_1
INT 21H
 
MOV AH,09
MOV DX,OFFSET DATA_2
INT 21H
 
MOV AH,09
MOV DX,OFFSET DATA_3
INT 21H
 
MOV AH,09
MOV DX,OFFSET DATA_4
INT 21H
 
MOV AH,09
MOV DX,OFFSET DATA_5
INT 21H
 
MOV AH,09
MOV DX,OFFSET DATA_6
INT 21H
 
MOV AH,09
MOV DX,OFFSET DATA_7
INT 21H
 
MOV AH,09
MOV DX,OFFSET DATA_8
INT 21H
 
MOV AH,09
MOV DX,OFFSET DATA_9
INT 21H
 
MOV AH,09
MOV DX,OFFSET DATA_10
INT 21H
 
MOV AH,09
MOV DX,OFFSET DATA_11
INT 21H
 
MOV AH,09
MOV DX,OFFSET DATA_12
INT 21H
;      CURSOR 12,26
 
         
MOV AH,2CH                             ; take watch
         INT 21H 
 
         MOV AL,CH                     ; hour
         CALL CONVERT
         MOV HOUR,AX
 
         MOV AL,CL                     ; minute
         CALL CONVERT
         MOV MINU,AX
 
         MOV AL,DH                     ; second
         CALL CONVERT
         MOV SECO,AX                  
         
         MOV AH,09H                    
         MOV DX,OFFSET TIME             
	 INT 21H  	               ; wait for any key press
	
          MOV AH,0
          INT 16H                     ;exit
	  
	CALL CONVERT
          
          MOV AL,00
          MOV BL,00
          MOV DL,00  
      
 STOP: MOV AH,07
       INT 21H          
       CMP AL,77        
       JE START         
      
      MOV AH,07         
      INT 21H
      CMP AL,82            
 
    JE RESET0
    RESET0: JMP FAR PTR RESET
    JMP FAR PTR RESET
    JMP NEAR PTR BX
    JMP BX
    CALL RESET
 
LOOP STOP   
 
START:CMP AL,00              
      JE  OVER              
      DEC AL                 
 
      MOV AH,00 
             
      MOV AL,AL
      MOV CL,1
      SHL AX,CL
      SHR AL,CL
 
      CURSOR 12,27     
     
      MOV CH,AH
 
      MOV AH,02
      MOV DL,AL
      INT 21H
 
      MOV AH,02
      MOV DL,CH
      INT 21H 
     
      MOV CH,AH
 
      MOV AH,02
      MOV DL,CH
      INT 21H
 
      MOV AH,02
      MOV DL,AL
      INT 21H 
 
      MOV AL,DH
  
OVER: MOV AL,99
      DEC BL
 
      MOV BH,00
      MOV AL,BL
      MOV CL,1
      SHL AX,CL
      SHL AL,CL
 
 
      MOV DH,AL
      MOV AL,AL
      MOV CL,1
      SHR AL,CL
      CURSOR 12,27
      MOV AH,02
      MOV DL,BL
      INT 21H 
      MOV AH,02
      MOV DL,BH
      INT 21H
      
      MOV AH,02
      MOV DL,BH
      INT 21H 
      MOV DL,BL
      INT 21H
 
      MOV AL,DH
       
      CMP BL,00
      JE BAHO
      DEC BL  
 
      MOV BH,00
      MOV AL,BL
      MOV CL,1
      SHL AX,CL
      SHL AL,CL
 
      MOV DH,AL
      MOV AL,AL
      MOV CL,1
      SHR AL,CL
      CURSOR 12,27
      MOV AH,02
      MOV DL,BL
      INT 21H 
      MOV AH,02
      MOV DL,BH
      INT 21H
     
      MOV AH,02
      MOV DL,BH
      INT 21H
 
      MOV AH,02 
      MOV DL,BL
      INT 21H
 
      MOV AL,DH
  BAHO:MOV BL,59
      DEC DL
 
      MOV DH,00
      MOV AL,DL
      MOV CL,1
      SHL AX,CL
      SHR AL,CL
 
      MOV DH,AL
      MOV AL,AL
      MOV CL,1
      SHR AL,CL
      CURSOR 12,27
      MOV AH,02
      MOV DL,DL
      INT 21H 
      MOV AH,02
      MOV DL,DH
      INT 21H
     
      MOV AH,02
      MOV DL,DH
      INT 21H 
      MOV AH,02
      MOV DL,DL
      INT 21H
 
      MOV AL,DH
 
      CMP DL,00
      JE IZO
      DEC DL
 
      MOV DH,00
      MOV AL,DL
      MOV CL,1
      SHL AX,CL
      SHR AL,CL
         
      MOV DH,AL
      MOV AL,AL
      MOV CL,1
      SHR AL,CL
      CURSOR 12,27
      MOV AH,02
      MOV DL,DL
      INT 21H 
      MOV AH,02
      MOV DL,DH
      INT 21H
     
      MOV AH,02
      MOV DL,DH
      INT 21H 
      MOV AH,02
      MOV DL,DL
      INT 21H
      MOV AL,DH
 
IZO: MOV DL,59H
 
      MOV DH,00
      MOV AL,DL
      MOV CL,1
      SHL AX,CL
      SHR AL,CL
 
      MOV DH,AL
      MOV AL,AL
      MOV CL,1
      SHR AL,CL
      CURSOR 12,27
      MOV AH,02
      MOV DL,DL
      INT 21H 
      MOV AH,02
      MOV DL,DH
      INT 21H
 
      MOV AL,00
 
      MOV AH,00
      MOV AL,AL
      MOV CL,1
      SHL AX,CL
      SHR AL,CL
 
      MOV DH,AL
      MOV AL,AL
      MOV CL,1
      SHR AL,CL
      CURSOR 12,27
      MOV CH,AH
      MOV AH,02
      MOV DL,AL
      INT 21H 
      MOV AH,02
      MOV DL,CH
      INT 21H
     
      MOV CH,AH
      MOV AH,02
 
      MOV DL,CH
      INT 21H 
      MOV AH,02
      MOV DL,AL
      INT 21H
      MOV AL,DH 
 
     MOV AH,00H
     INT 16H
     MOV CH,AL
     CMP AL,83
     MOV AL,CH 
 
    JE STOP0
    STOP0: JMP FAR PTR STOP
    JMP FAR PTR STOP
    JMP NEAR PTR BX
    JMP BX
    CALL STOP
     
     JMP START
 
RESET: MOV BL,00
       MOV CH,00
       MOV DL,00
 
      JMP  STOP 
	  
CONVERT :                       ;convert decimal
 
	  PUSH CX 	                ;year
	  XOR AH,AH 
	  MOV CL,10 
	  DIV CL
	  ADD AX,3030H 
 	  POP CX
	  RET
          END MAIN

Open in new window

Avatar of Infinity08
Infinity08
Flag of Belgium image

>> its'n give me error but not working properly.

How is it not working properly ? How does the code behave ? How should it behave ? What goes wrong under what conditions ?
Avatar of anelka_tm
anelka_tm

ASKER

program take time from computer, HH:MM:SS and that time program should count down, until 00:00:00.
for example here time now 02:49:33 pm if i start program at this time it should count down 02:49:32, 02:49:31, 02:49:30, ... 00:00:00
and it should show between DATA_1 and DATA_9 (there is gui hh : mm : ss)
i cant understant what conditions wrong :(
Ok, that's what you want the code to do.

But what is it really doing ? Where's the problem ?
forget about all
i explain beginnig,
DATA_1  DB '---------     --------         --------     --------         --------     -------- $'
DATA_2  DB '|        |   |        |       |        |   |        |       |        |   |        |$'        
DATA_3  DB '|        |   |        |       |        |   |        |       |        |   |        |$'
DATA_4  DB '|        |   |        |       |        |   |        |       |        |   |        |$'
DATA_5  DB '|        |   |        |   :   |        |   |        |   :   |        |   |        |$'
DATA_6  DB '|        |   |        |       |        |   |        |       |        |   |        |$'
DATA_7  DB '|        |   |        |       |        |   |        |       |        |   |        |$'
DATA_8  DB '|        |   |        |       |        |   |        |       |        |   |        |$'
DATA_9  DB '---------     --------         --------     --------         --------     -------- $'
DATA_10 DB  'FOR STOP  PRESS S'
DATA_11 DB  'FOR START PRESS M'
DATA_12 DB  'FOR RESET PRESS R'  

if user press 'R' it will be 00:00:00
if user press 'M' it will be 59:59:59
if user press 'S' it will be stop where it is.

but my program just show the output, that is it. i cant use keyboard,

you can compiler this code in your pc
stopwatch.jpg
ASKER CERTIFIED SOLUTION
Avatar of Infinity08
Infinity08
Flag of Belgium image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Btw, don't forget to add newlines at the end of each line.