Rotate instruction in microprocessor

From Wikiversity
Jump to navigation Jump to search

These operations are equivilent to multiplying by 2:

I) Shift left by 1 (shifting left by n is multiplying by 2^n)

II) Add the value to itself once.

Other than that you can write a loop to add the number to itself 'n' times.

Or, if you don't need to generalize you can use the following algorithm:

to multiply an 8 bit value (x) by 3:

.....0 x7 x6 x5 x4 x3 x2 x1 x0 --- (x * 1) + x7 x6 x5 x4 x3 x2 x1 x0 0 ---- (x * 2) (x << 1)


to multiply by 5:

.....0...0 x7 x6 x5 x4 x3 x2 x1 x0 ---- (x * 1) + x7 x6 x5 x4 x3 x2 x1 x0...0...0 ---- (x * 4) (x << 2)



The "."s are just to get the spacing right

Here is a site with a general bit serial algorithm:

You can use RAL (rotate left with carry). That will rotate the high order bit to the carry flag and the carry flag to the low order bit. If you need to have the result be greater than 8 bits, you can use the carry flag to shift the bit values into another byte.

If I remember right, the 8085 is a 8 bit processor. This is how you would shift an 8 bit value, yielding a 16 bit result:

STC CMC LDA [a] RAL STA [a] LDA [a+1] RAL STA [a+1]

I'm actually more familiar with the 8088/6 and later processors. After looking at the instruction set in more detail, I believe the RAL will not only rotate the high order bit throuh the carry flag, but also rotate the carry flag to the low order bit. That's why you need to clear the carry flag before starting. Since there is no clear carry instruction, the way I did it above was to set the carry flag, then compliment it. Also, it doesn't appear that the RAL instruction allows you to rotate more than one bit at a time.