8086 program to Multiply two 8 bit numbers using successive addition method




ØØ       Explanation :
·           Consider that a byte is present in the AL register and second byte is present in the BL register.
·           We have to multiply the byte in AL with the byte in BL.
·           We will multiply the numbers using successive addition method.
·           In successive addition method, one number is accepted and other number is taken as a counter. The first number is added with itself, till the counter decrements to zero.

·           Result is stored in DX register. Display the result, using display routine.
For example :   AL = 12 H,  BL = 10 H
                                Result = 12H + 12H + 12H + 12H + 12H + 12H + 12H + 12H + 12H + 12H
                                Result = 0120 H
ØØ       Algorithm :
Step I          :   Initialise the data segment.
Step II        :   Get the first number.
Step III      :   Get the second number as counter.
Step IV       :   Initialize result = 0.
Step V        :   Result = Result + First number.                                               
Step VI       :   Decrement counter
Step VII     :   If count ¹ 0, go to step V.
Step VIII   :   Display the result.
Step IX      :   Stop.
ØØ       Flowchart : Refer flowchart 11.

ØØ       Program :
.model small
.data
a db 12H
b db 10H
.code
       mov     ax, @data      ; Initialize data section
       mov     ds, ax
       mov     al, a              ; Load number1 in al     

       mov     bl, b             ; Load number2 in bl
       mov     ah, 0  
       mov     dx, 0            ; intialize result
ad:   add      dx, ax           ; add numbers. Result in dx
       dec      bl                 ; dec number
       cmp     bl, 0
       jnz       ad                        
       mov     ch, 04h         ; Count of digits to be displayed
       mov     cl, 04h ; Count to roll by 4 bits
       mov     bx, dx           ; Result in reg bx
l2:    rol       bx, cl            ; roll bl so that msb comes to lsb
       mov     dl, bl            ; load dl with data to be displayed
       and      dl, 0fH ; get only lsb
       cmp     dl, 09           ; check if digit is 0-9 or letter A-F
       jbe       l4
       add      dl, 07           ; if letter add 37H else only add 30H
l4:    add      dl, 30H
       mov     ah, 02           ; Function 2 under INT 21H (Display character)
       int       21H
       dec      ch                ; Decrement Count
       jnz       l2
       mov     ah, 4cH         ; Terminate Program
       int       21H
       end
ØØ       Result :
C:\programs>tasm succmul.asm
Turbo Assembler  Version 3.0  Copyright (c) 1988, 1991 Borland International
Assembling file:   succmul.asm
Error messages:    None
Warning messages:  None
Passes:            1
Remaining memory:  438k
C:\programs>tlink succmul
Turbo Link  Version 3.0 Copyright (c) 1987, 1990 Borland International
Warning: No stack
C:\programs>succmul
0120