;MULTIPLICATION OF DUNAMICALLY ANY SINGLE, DOUBLE, TRIPLE DIGIT NUMBERS AND DISPLAY USING LOOP AND DISPLAY SUM IN ASSEMBLY ORG 100H .MODEL SMALL .STACK 100H .DATA RANGE DB 13,10, 'ENTER RANGE: $' R DW ? EN DB 13,10,'ENTER A NUMBER: $' N DW ? UN DB 13,10, 'MULTIPLICATION = $' MULT DW 1 .CODE MAIN PROC MOV AX,@DATA MOV DS,AX MOV DX,OFFSET RANGE MOV AH,9 INT 21H MOV AH,1 ;INPUT STORES IN AL INT 21H MOV AH,0 MOV R,AX SUB R,48 MOV CX,R L: PUSH CX MOV DX,OFFSET EN MOV AH,9 ;FOR PRINTING STRING INT 21H ;INPUT CODE STARTS HERE MOV N,0 ;N = 0 MOV BL,10 ;BL = 10 INPUT: ;LOOP LABEL MOV AH,1 ;INPUT A CHARACTER => STORES IN AL INT 21H ;INTERUPT FOR TEXT CMP AL,13 ;COMPARE INPUT WITH ENTER KEY JE NEXT ;IF JUMP EQUAL TO THEN ITS JUMP ON LABEL SUB AL,30H ;SUB AL = AL - 48 = AL - 30H MOV AH,0 ;AH = 0 MOV CX,AX ;CX = AX MOV AX,N ;AX = N MUL BL ;MULTIPLY => AX = AX * BL ADD AX,CX ;ADD => AX = AX + CX MOV N,AX ;N = AX JMP INPUT ;INPUT CODE ENDS HERE NEXT: MOV AX,N ;AX = N MOV BX,MULT ;BX = MULT MUL BX ;AX = AX * BX MOV MULT,AX ;MULT = AX POP CX LOOP L LEA DX,UN ;LOAD EFFECTIVE ADDRESS MOV AH,9 INT 21H ;OUTPUT CODE STARTS HERE MOV AX,MULT ;AX = SUM = 25 MOV DX,0 ;DX = 0 MOV BX,10 ;BX = 10 MOV CX,0 ;CX = 0 => COUNTER REGISTER L1: DIV BX ;DIVIDE => AX = AX / BX ;IN CASE OF 8 BIT REGISTER => AL = QUOTIENT, AH = REMAINDER ;IN CASE OF 16 BIT REGISTER => AX = QUOTIENT, DX = REMAINDER ;AX = 2 , DX = 5 PUSH DX ;5 SAVE IN STACK MOV DX,0 ;DX = 0 MOV AH,0 ;AX AH = 00000000, AL = QUOTIENT INC CX ;CX = CX + 1 CMP AX,0 ;(2 == 0) JNE L1 ;JUMP NOT EQUAL => AX != 0 MOV AH,2 ;OUTPUT/PRINT A SINGLE CHARACTER L2: POP DX ;FIRST TIME POP 2 AND SECOND TIME POP 5 = 25 ADD DX,48 INT 21H LOOP L2 ;OUTPUT CODE ENDS HERE RET MAIN ENDP END MAINP