ビット位置を変更するタスクがあります
START ビット 7 | ビット6 | ビット5 | ビット4 | ビット3 | ビット2 | ビット 1 | ビット0
FINAL ビット 3' | bit2' | ビット7 | ビット6 | ビット 1 | ビット0 | bit5' | bit4'
ビット単位およびシフト/ローリング命令の使用。
シフトとローリング以外の方法でそれらを移動する方法がわかりません。そのためには、1 つまたは複数のレジスタのみを使用する必要がありますか?
ビット位置を変更するタスクがあります
START ビット 7 | ビット6 | ビット5 | ビット4 | ビット3 | ビット2 | ビット 1 | ビット0
FINAL ビット 3' | bit2' | ビット7 | ビット6 | ビット 1 | ビット0 | bit5' | bit4'
ビット単位およびシフト/ローリング命令の使用。
シフトとローリング以外の方法でそれらを移動する方法がわかりません。そのためには、1 つまたは複数のレジスタのみを使用する必要がありますか?
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 _ _'
(そして、これは解決策の半分です)