*アセンブリ 8086 (x86-32) を使用しています
処理は非常に簡単です。レジスタ AL (8 ビット) にバイト サイズの数値があり、レジスタ内の数値のビット 1 (右から 2 番目) とビット 4 (右から 5 番目) の間で交換する必要があります。アル。
例: Al の番号が 00010000B の場合、00000010B になります。
ありがとうございました!
*アセンブリ 8086 (x86-32) を使用しています
処理は非常に簡単です。レジスタ AL (8 ビット) にバイト サイズの数値があり、レジスタ内の数値のビット 1 (右から 2 番目) とビット 4 (右から 5 番目) の間で交換する必要があります。アル。
例: Al の番号が 00010000B の場合、00000010B になります。
ありがとうございました!
これを試すことができます:
mov BL, AL
mov BH, AL
and BL, 2h //empty all bits except first
and BH, 10h //empty all bits except fourth
shl BL, 3 //move bit 1 to position of bit 4
shr BH, 3 //move bit 4 to position of bit 1
and AL, edh //empty first and fourth bits
or AL, BL //set bit 4
or AL, BH //set bit 1
AL レジスタには結果が含まれます。また、レジスタ BX に格納されたデータが必要になる場合もあります。もしそうなら、ソリューションを前に追加します
push BX
end 末尾に追加
pop BX
6 つの代替命令を追加します。
xor bl, bl ; -> clear work register
btr ax, 1 ; -> second bit to carry, clear that bit in al
cmovc bl, 8 ; -> set bit at bitpos 3
btr ax, 4 ; -> fifth bit to carry, clear that bit in al
rcl bl, 2 ; -> set bit at bitpos 2, shift bitpos 3 -> 5
or al, bl ; -> merge bits
注: これは単なる学術的な演習です。btr 命令を使用するコードは遅いため、おそらく望ましくありません。少なくとも前回はそれらを使用しようとしました。また: 未テスト。
486 の命令セットが必要です。