salut à tous

je suis entrain de travailler sur un projet qui portera sur La communication
parallèle à travers la carte Centronics. Le but de ce projet est de réaliser la communication entre un PC et périphérique (afficheur sept segment) en servant de la carte Centronics présente dans les PC. Notre plate-forme de test est constituée d’un câble, un connecteur mal DB25 et un afficheur sept segment. bien sur le périphérique peut être une imprimante ou autre.
une sous partie de ce projet :
Ecrire un programme en assembleur qui permet de faire la somme de deux nombres décimaux et afficher le résultat de la somme sur l’afficheur 7 Segments.
Si la somme dépasse 9 la lettre d doit être affichée.
mais le problème que ce programme ne fonctionne pas et j'arrive pas a trouver l'erreur

Assume ds:data,cs:code
data segment
tab db 0BFh,086h,0DBh,0CFh,0E6h,0EDh, 0FDh,087h,0FFh,0EFh
A db ?
B db ?
data ends

code segment
main: mov ax,data
mov ds,ax
mov si,0
mov al,tab[0]
mov dx,378h
out dx,al

suite: mov ah,07h
int 21h
cmp al,"r"
je fin
cmp al,30h
jb suite
cmp al,39h
ja suite
sub al,30h
mov A,al
xor ah,ah
mov si,ax
mov al,tab[si]
mov dx,378h
out dx,al

suit1: mov ah,07h
int 21h
cmp al,"+"
jne suit1

suit2: mov ah,07h
int 21h
cmp al,"r"
je fin
cmp al,30h
jb suit2
cmp al,39h
ja suit2
sub al,30h
mov B,al
xor ah,ah
mov si,ax
mov al,tab[si]
mov dx,378h
out dx,al

suit3: mov ah,07h
int 21h
cmp al,"="
jne suit1
mov Bl,A
mov Cl,B
add Bl,Cl
xor bh,bh
cmp bl,9
ja aff
mov si,bx
mov al,tab[si]
mov dx,378h
out dx,al
jmp fin

aff: mov al,0DEh
mov dx,378h
out dx,al

fin : mov ah,4ch
int 21h

code ends
end main