-1

例如,假设寄存器 4 (R4) 的值为 0001110010101111。如何在不移动或更改单个十六进制指令中的其他位的情况下将位 5 (0001110010 > 1 < 01111) 更改为 0(即使它已经是 0)?

所以 0001110010 1 01111 -> 0001110010 0 01111

4

1 回答 1

0

你会想要的AND。由于 for 的立即值为AND5 位并且它使用符号扩展,因此您只能清除一个位,如果它是四个最低有效位之一。否则,您将需要执行另一条指令将掩码加载到寄存器中。我会做一个两者的例子。

在第 5 位的情况下,将屏蔽该位的数字是0b1111111111011111。在十进制中,这是#65503or #-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

在第 3 位的情况下,将屏蔽该位的数字是0b1111111111110111。在十进制中,这是#65527or #-9。这将适合 的立即值AND,因此您可以在一条指令中执行它:

; 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 回答