.MODEL SMALL .STACK 100H .DATA PROMPT_1 DB \'Enter a decimal digit string : $\' PROMPT_2 DB 0DH,0AH,\'The sum of the decimal digit string in Hex is : $\' ILLEGAL DB 0DH,0AH,\'Illegal character. Try again : $\' TEMP DW ? VALUE DW ? v dw ? .CODE MAIN PROC MOV AX, @DATA ; initialize DS MOV DS, AX LEA DX, PROMPT_1 ; load and display the string PROMPT_1 MOV AH, 9 INT 21H JMP @START_2 ; jump to label @START_2 @START_1: ; jump label LEA DX, ILLEGAL ; load and display the string ILLEGAL MOV AH, 9 INT 21H XOR BX, BX ; clear BX XOR CX, CX ; clear CX @START_2: ; jump label MOV AH, 1 INT 21H INC CX ; increment CX CMP AL, 0DH ; compare AL with CR JNE @SKIP ; jump to label @SKIP if AL!=CR CMP CX, 1 ; compare CX with 1 JB @START_1 ; jump to label @START_1 if CX<1 JMP @END_INPUT ; jump to label @END_INPUT @SKIP: ; jump label CMP AL, 30H ; compare AL with 0 JB @START_1 ; jump to label @START_1 of AL<0 CMP AL, 39H ; compare AL with 1 JA @START_1 ; jump to label @START_1 if AL>9 AND AL, 0FH ; convert the ascii to decimal code XOR AH, AH ; clear AH ADD BX, AX ; add BX and AX JMP @START_2 ; jump to label @START_2 @END_INPUT: ; jump label LEA DX, PROMPT_2 ; load and display the string PROMPT_2 MOV AH, 9 INT 21H MOV CX, 4 ; initialize loop counter MOV AH, 2 ; set output function @LOOP_1: ; loop label XOR DX, DX ; clear DX @LOOP_2: ; jump label SHL BX, 1 ; shift BX towards left by 1 position RCL DL, 1 ; rotate DL towards left by 1 position INC DH ; increment DH CMP DH, 4 ; compare DH with 4 JNE @LOOP_2 ; jump to label @LOOP_2 if DH!=4 CMP DL, 9 ; compare DL with 9 JBE @NUMERIC_DIGIT ; jump to label @NUMERIC_DIGIT if DL<=9 SUB DL, 9 ; convert it to number i.e. 1,2,3,4,5,6 OR DL, 40H ; convert number to letter i.e. A,B...F JMP @DISPLAY ; jump to label @DISPLAY @NUMERIC_DIGIT: ; jump label OR DL, 30H ; convert decimal to ascii code @DISPLAY: ; jump label INT 21H ; print the character LOOP @LOOP_1 ; jump to label @LOOP_1 if CX!=0 MOV AH, 4CH ; return control to DOS INT 21H MAIn ENDP END MAIN