例如,让我们说寄存器4(R4)的值为0001110010101111.如何将第5位(0001110010> 1 < 01111)更改为0(即使它已经0)没有移动或更改单个十六进制指令中的其他位 ?
所以0001110010 1 01111 - > 0001110010的 0 01111
答案 0 :(得分:0)
你想要AND
它。由于AND
的立即值是5位并且它使用符号扩展,所以如果它是四个最低有效位之一,则只能清除一个位。否则,您需要执行另一条指令将掩码加载到寄存器中。我会举两个例子。
在第5位的情况下,掩码该位的数字为0b1111111111011111
。在十进制中,这是#65503
或#-33
。由于它太大而不适合立即指令,因此您无法在单个指令中执行此操作。您需要在程序的数据段中声明它并将掩码加载到寄存器中。然后,您可以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
。
0b1111111111110111
在第3位的情况下,掩码该位的数字为#65527
。在十进制中,这是#-9
或AND
。这将符合; assuming R4 = 0001110010101111
AND R4, R4, #-9 ; set R4 = R4 AND #-9
; R4 will now have the bit cleared
的直接值,因此您可以在一条指令中执行它:
{{1}}