0

ビット位置を変更するタスクがあります

START ビット 7 | ビット6 | ビット5 | ビット4 | ビット3 | ビット2 | ビット 1 | ビット0

FINAL ビット 3' | bit2' | ビット7 | ビット6 | ビット 1 | ビット0 | bit5' | bit4'

ビット単位およびシフト/ローリング命令の使用。

シフトとローリング以外の方法でそれらを移動する方法がわかりません。そのためには、1 つまたは複数のレジスタのみを使用する必要がありますか?

4

1 に答える 1

3

shift と rol を使用すると、2 つのレジスターで実行できるはずであり、進行中にオリジナルが無駄になります。

キャリーを介して右にシフトすると、左端のビットがキャリーにコピーされます。キャリーを介して B を右にシフトすると、そのビットがレジスタ B にコピーされ、LSB がキャリーにシフトされます。

の順番で

1 - ROR A,A,1     // A = _7654321, --> carry = '0'
2 - ROR B,B,1     // B = 0_______, --> carry = 'x' / don't care
3 - ROR A,A,1     // A = x_765432, --> carry = '1'
4 - ROR B,B,1     // B = 10______, --> carry = 'x' / don't care
// this has copied two bits from A to B while shifting both

5 - ROR B,B,1     // B = x10_____,
6 - ROR B,B,1     // B = xx10____,

repeat steps 1-4 again for B to contain bits '3 2 _ _ 1 0 _ _'

(そして、これは解決策の半分です)

于 2013-02-19T14:46:10.093 に答える