-1

たとえば、レジ​​スタ 4 (R4) の値が 0001110010101111であるとします。単一の 16 進命令で他のビットを移動または変更せずに、ビット 5 (0001110010 > 1 < 01111) を 0 (既に 0 であっても) に変更するにはどうすればよいでしょうか? ?

だから 0001110010 1 01111 -> 0001110010 0 01111

4

1 に答える 1

0

あなたはそれをしたくなるでしょうAND。の即値ANDは 5 ビットであり、符号拡張を使用するため、最下位 4 ビットの 1 つである場合にのみビットをクリアできます。それ以外の場合は、別の命令を実行してマスクをレジスタにロードする必要があります。両方の例を示します。

5 ビット目の場合、そのビットをマスクする番号は です0b1111111111011111。10 進数では、これは#65503または#-33です。これは大きすぎて直接の命令に収まらないため、1 つの命令では実行できません。プログラムのデータ セグメントで宣言し、マスクをレジスタにロードする必要があります。次に、でできANDますR4

; assuming R4 = 0001110010101111
LD R5, MASK_5  ; load the mask into R5
AND R4, R4, R5 ; set R4 = R4 AND R5
               ; R4 will now have the bit cleared

; data segment
MASK_5 .FILL #65503

3 ビット目の場合、そのビットをマスクする番号は です0b1111111111110111。10 進数では、これは#65527または#-9です。これは の即値に収まるANDので、1 つの命令で実行できます。

; assuming R4 = 0001110010101111
AND R4, R4, #-9 ; set R4 = R4 AND #-9
                ; R4 will now have the bit cleared
于 2014-10-23T22:10:25.190 に答える