3

*アセンブリ 8086 (x86-32) を使用しています

処理は非常に簡単です。レジスタ AL (8 ビット) にバイト サイズの数値があり、レジスタ内の数値のビット 1 (右から 2 番目) とビット 4 (右から 5 番目) の間で交換する必要があります。アル。

例: Al の番号が 00010000B の場合、00000010B になります。

ありがとうございました!

4

5 に答える 5

3

これを試すことができます:

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
于 2012-11-03T08:47:05.040 に答える
1

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 の命令セットが必要です。

于 2012-11-03T10:00:58.083 に答える