Sorry I don't understand your code. Can you refine it more. Here is a timer I made before all these posts and I need something that could replace those timer blocks with something that can time below a millisecond.
ADD SP,0100h ;Setting the stack pointer to 256 bits,
MOV CX,0005h
label2:
PUSH CX
MOV AX,0034h
MOV DX,0378h
OUT DX,AX
MOV AX,0001h ;This block sends 34h to parallel port
MOV DX,037Ah
OUT DX,AX
MOV AX,000Ch
OUT DX,AX
MOV BH,01h
MOV AH,2Ch
INT 21h
MOV [DI],DH
label1: ;This block is timer #1
INT 21h
SUB DH,[DI]
CMP DH,BH
JB label1
MOV AX,0048h
MOV DX,0378h
OUT DX,AX
MOV AX,0001h
MOV DX,037Ah ;This block sends 48h to parallel port
OUT DX,AX
MOV AX,000Ch
OUT DX,AX
MOV BH,01h ;Set delay to 1 second
MOV AH,2Ch ;Interupt 21 function 2C
INT 21h
MOV [DI],DH ;Copy current time in seconds to memory
label3: ;This block is timer #2
INT 21h ;Get new time
SUB DH,[DI} ;Get time elapsed
CMP DH,BH ;Compare the elapsed time to BH
JB label3 ;Jump to label3 if DH is smaller than BH
POP CX
LOOP label2 ;Loop to the biggining and repeat 5 times
INT 20h