How are bit shifts implemented at the hardware level when the number to shift by is unknown?
I can't imagine that there would be a separate circuit for each number you can shift by (that would 64 shift circuits on a 64-bit machine), nor can I imagine that it would be a loop of shifts by one (that would take up to 64 shift cycles on a 64-bit machine). Is it some sort of compromise between the two or is there some clever trick?
Bit shifting means moving the position of the bits in the left direction or in the right direction. For example, if we write in binary form the decimal number 23 , we get 00010111 . If we shift all bits left with one position, we'll get 00101110 . Bit 7 (MSB) was replaced by bit 6, bit 6 by bit 5 and so on.
Shifters and rotators move bits and multiply or divide by powers of 2. As the name implies, a shifter shifts a binary number left or right by a specified number of positions. Several kinds of commonly used shifters exist: Logical shifter—shifts the number to the left or right and fills empty spots with 0's.
A barrel shifter is a digital circuit that can shift a data word by a specified number of bits without the use of any sequential logic, only pure combinational logic, i.e. it inherently provides a binary operation.
In general just one. But the correct answer is it depends of the CPU architecture, specifically of its arithmetic and logical unit. Then, if the ALU implements a sequential shift register, then it will take so cycles as bits in the register.
The circuit is called a "barrel shifter" - it's a load of multiplexers basically. It has a layer per address-bit-of-shift-required, so an 8-bit barrel shifter needs three bits to say "how much to shift by" and hence 3 layers of muxes.
Here's a picture of an 8-bit one from http://www.globalspec.com/reference/55806/203279/chapter-9-additional-circuit-designs:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With