Thursday 27 December 2012

Easy way of 16 bit multiplication in 8051

This is the easiest way I found for 16 bit multiplication. After getting this trick you can also multiply two 32 bits, 64 bits, and so on.

Suppose I have two hex number "ABCD" and "EFGH". Here each alphabet is 4 bit binary number. In 8051 we can multiply 8 bit binary number with using MUL instruction.

here AB= MSB1 (most significant bit of 1st number)
        CD= LSB1
        EF= MSB2
        GH= LSB2

Now,

LSB1*LSB2 = W1,W2
LSB1*MSB2 = W3,W4
MSB1*LSB2 = W5,W6
MSB1*MSB2 = W7,W8

Here Wi(where i is number 1 to 8) is word length. e.g. in F01D W1 is "F0" and W2 is "1D".

This operation can done by MUL instruction. Now the final answer is 32 bit long so we have 4 word of 8 bit length. So assume our final answer is
ABCD*EFGH = WXYZ
.
Here  WXYZ  each alphabet represent a word length of 8 bit binary number.

Now Z = W2
         Y+C1 = W1+W4+W6
Here you find one carry byte. e.g. 110 number 01 is carry byte and value of Y is 10.
         X+C2 = W3+W5+W8+C1
         W = W7+C2
If you find any carry in last summation ignore it.


Ex. You have two number FFFF*EF9D

FF*9D=9C 63
FF*EF=EE 11
FF*9D=9C 63
FF*EF=EE 11

Z= 63
Y=9C+11+63=110 where Y=10 and C1=01
X=EE+9C+11+01=19C where X=9C and C2=01
W= EE+01=EF

Our answer is FFFF*EF9D = EF 9C 10 63

You will find assembly program of this multiplication in onward post in Fab,2014.

Using this technique you can also solve 32 bits or 64 bits multiplication.

Thank you.
View My Stats