如何使用布尔运算将位设置为0?

时间:2013-01-19 02:00:10

标签: assembly 6502

6502程序集中的按位操作还是新手。我想要一个字节 有8个标志。这将存储我的元精灵的状态。

我希望能够在不改变其他标志的情况下设置特定标志。

我知道如何使用ORA将它们设置为一个:

  lda status
  ora #%00000001 ; set bit 0 to true
  sta status

我知道如何使用EOR来切换它们:

  lda status
  eor #%00000001 ; if bit 0 = true, then bit 0 = false and vise versa
  sta status

最后,我知道如何判断一下是否属实:

  lda status
  and #%00000001 ; if bit 0 = true then set overflow flag to true

但是如何将特定标志设置为0,而不更改其他标志?即使我用过 AND,我如何强制它将所需的位设置为0?

谢谢,我确定我错过了一些简单的事情。

2 个答案:

答案 0 :(得分:5)

怎么样

lda status
and #%11111110 ; set bit 0 to false
sta status

请注意,未触及所有其他位,因为每个位1 AND X始终为X。由于0 AND X始终为0,因此仅更改位0。

答案 1 :(得分:1)

我并不熟悉6502,但是为了清楚一点,除了要清除的值之外,还要设置一个除了你设置的位之外的值。