Your multiplication results are numbers with more than one digit, so you will need a procedure to convert the number to string, for example, convert 21 to '21', because if you display 21 the screen will show the ASCII char 21 ('§').
I will add the procedure "number2string" to your code, this procedure takes two parameters : AX
is the number to convert (in your case, the result of the multiplication), and SI
with the address of a string variable :
.MODEL SMALL
.STACK 100H
.DATA
MSG DB 'ENTER A DIGIT:$'
NL DB 0DH,0AH,'$'
NUM DB ? ;◄■■ NUMBER ENTERED BY USER.
STRING DB '$$$$$$' ;◄■■ STRING TO STORE NUMBER CONVERTED.
.CODE
MAIN PROC
MOV AX,@DATA
MOV DS,AX
LEA DX,MSG
MOV AH,09
INT 21H
MOV AH,01
INT 21H
SUB AL,'0' ;◄■■ CONVERT CHAR TO NUMBER.
MOV NUM,AL ;◄■■ PRESERVE NUMBER BECAUSE AL WILL BE DESTROYED.
XOR BX,BX
MOV BL,1
MOV CX,10 ;◄■■ NOT CL.
TOP:
MOV AL,NUM ;◄■■ THE NUMBER TO CONVERT.
MUL BL ;◄■■ RESULT IN AX.
PUSH BX ;◄■■ BX AND CX WILL BE
PUSH CX ;◄■■ DESTROYED IN PROC.
LEA SI,STRING ;◄■■ STORE NUMBER CONVERTED.
CALL NUMBER2STRING ;◄■■ CONVERT AX TO STRING.
POP CX ;◄■■ RESTORE BX
POP BX ;◄■■ AND CX.
LEA DX,NL
MOV AH,09
INT 21H
LEA DX,STRING ;◄■■ DISPLAY NUMBER CONVERTED.
MOV AH,09
INT 21H
INC BL
LOOP TOP ;◄■■ CX-1, IF CX > 0 JUMP TO TOP.
;JCXZ SKIP ;◄■■ UNNECESSARY.
;SKIP: ;◄■■ UNNECESSARY.
MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN