8086 program to Multiply two 16 bit numbers
03:56
ØØ       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

 
 

 
 
 
 
 
0 comments: