0

ハードウェアでビットを反転するように求められます。たとえば、シフトと回転の組み合わせを使用して、1011 0100 が 0010 1101 になるようにミラー反転します。これらのコマンドがどのように機能するかは理解していますが、反転する方法が思いつきません。ありがとう。SAL アセンブリ言語を使用して行う必要があります。

4

1 に答える 1

1

シフトのみを使用して b ビット ワードを反転する必要がある場合は、スタックをエミュレートできます。

b times{
  right shift on the input register, setting a carry flag.
  left shift on the output register, reading the carry flag.
}

x86には「キャリーによる回転」命令があることに注意してください-これらは両方の目的を果たします(または、入力レジスタでキャリーなしで回転を使用して入力を保持します)。キャリーからの左シフトは利用できないが、キャリーからの右シフトは利用できる場合、前のアルゴリズムの「左」と「右」という言葉を逆にします。キャリーからのシフトが利用できない場合は、「通常の」論理シフトとそれに続く正しいビットの設定によってエミュレートする必要がありますが...

AND と OR も使用でき、b が事前にわかっていて 2 のべき乗である場合は、より高速な方法があります。各ペア内で 2 ビット、次に各ニブル内で 2 つのペア、次に各バイト内で 2 つのニブル、次に各ワード内で 2 バイト...

8 ビット x の場合:

                                    //1234 5678
x = (0x55 & x)<< 1 | (0xAA & x)>> 1 //2143 6587
x = (0x33 & x)<< 2 | (0xCC & x)>> 2 //4321 8765
x = (0x0F & x)<< 4 | (0xF0 & x)>> 4 //8765 4321
于 2012-10-27T05:03:53.873 に答える