Premetto che stò utilizzando emu8086

Ho questo codice

codice:
#ORG 100h

JMP start
NUM DB 32    ;dichiaro una var Num di tipo Byte valorizzata con un num dec a 2 cifre(es32)
B DB ?,?,?   ;dichiaro un vettore di 3 elementi non valorizzati di tipo byte  
          
start:

MOV AH,0     ;azzero AH per ospitare l'eventuale resto della divisione
MOV AL,NUM   ;sposto nel registro AL il valore specificato in NUM (in questo caso 32)
MOV BL,10   ;imposto in un registro il valore del divisore
DIV BL      ;eseguo la divisione tra AL (dividendo) e BL (divisore)
MOV NUM,AL  ;aggiorno la var NUM con il quoziente della divisione
ADD AH,'0'      ;aggiungo il valore '0' al resto della divisione
MOV B[1],AH     ;metto nell'elemento dell'array B di indice 1 il risultato della somma precedente
MOV AH,0        ;riazzero AH per ospitare l'eventuale resto della divisione
DIV BL          ;eseguo la divisione tra AL (dividendo) e BL (divisore)
ADD AH,'0'   ;aggiungo il carattere '0' al resto della divisione
MOV B[0],AH  ;metto nell'elemento dell'array B di indice 0, il resto+il carattere '0'
MOV B[2],'$' ;metto in B[2] il carattere $
LEA DX,B    
MOV AH,9
INT 21H
HLT	     ; Termino il programma
Non mi è chiaro ADD AH,'0' ;aggiungo il valore '0' al resto della divisione ... a che serve fare questo 0,2+0?
Il resto della prima divisione è 0,2 ... io facendo quell'istruzione (aggiungo 0) è come se diventasse 2?? e la stessa cosa vale per il secondo resto della divisione (3/10 = 0,3 -> 0,3 + 0=3) e una volta stampato a schermo esce 32?

E a cosa servono le istruzioni
MOV AH,9
INT 21H
??

Si riferisce al comando per stampare il risultato? cioè l'interrupt 21 , funz 21 ovvero stampa una stringa?