mov number_1, 30h
mov number_2,31h
mov number_3,32h
In order to join them you don't have to do anything at all if you defined all of those *number_ * variables consecutively as byte-sized variables. Their storage will be adjacent and thus referring to the 1st number_1 variable will be tantamount to referring to the string. If necessary you can attach a string terminator.
number_1 db ?
number_2 db ?
number_3 db ?
db 0
If you insist on copying to a separate string, then you could do it like this:
number_1 db ?
number_2 db ?
number_3 db ?
...
time db 3 dup (?), '$' ; With $-terminator this time, you choose
...
cld ; You need this only once (most of the time)
lea si, number_1 ; Source
lea di, time ; Destination
movsw ; number_1 and number_2 together
movsb ; number_3
or
mov ax, number_1 ; number_1 and number_2 together
mov time, ax ; number_1 and number_2 together
mov al, number_3 ; number_3
mov time+2, al ; number_3