8086 program to Multiply two 16 bit numbers




ØØ       Explanation :
·           Consider that a word of data is present in the AX register and 2nd word of data is present in the BX register.
·           We have to multiply the word in AX with the word in BX. Using MUL instruction, multiply the contents of the 2 registers.
·           The multiplication of the two 16 bit numbers may result into a 32 bit number. So result is stored in the DX and AX register.
·           The MSB of result is stored in the DX register and LSB of result in AX register.
ØØ       Algorithm :
Step I       :    Initialise the data segment.
Step II     :    Get the first number in AX register.
Step III   :    Get the second number in BX register.                                     
Step IV    :    Multiply the two 16 bit numbers.
Step V     :    Display the result.
Step VI    :    Stop
ØØ       Flowchart : Refer flowchart 20.

ØØ       Program :
.model small
.data              
a dw 1234H
b dw 0100H
.code
       mov     ax, @data      ; Initialize data section
       mov     ds, ax
       mov     ax, a             ; Load number1 in ax
       mov     bx, b            ; Load number2 in bx
       mul      bx                ; multiply numbers. Result in dx and ax
       mov     si, ax
       mov     bx, dx           ; Result in reg bx
       mov     dh, 2
l1:     mov     ch, 04h         ; Count of digits to be displayed
       mov     cl, 04h ; Count to roll by 4 bits  
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
       dec      dh
       cmp     dh, 0
       mov     bx, si  
       jnz       l1
       mov     ah, 4cH         ; Terminate Program
       int       21H
       end
ØØ       Result :
C:\programs>tasm 16-mul.asm
Turbo Assembler  Version 3.0  Copyright (c) 1988, 1991 Borland International
Assembling file:   16-mul.asm
Error messages:    None
Warning messages:  None
Passes:            1
Remaining memory:  438k
C:\programs>tlink 16-mul
Turbo Link  Version 3.0 Copyright (c) 1987, 1990 Borland International
Warning: No stack
C:\programs>16-mul
00123400