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