【问题标题】:How do I set bits to 0 with boolean arithmetic?如何使用布尔运算将位设置为 0?
【发布时间】:2013-01-19 02:00:09
【问题描述】:

对于 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?即使我用过 并且,我将如何强制它将所需的位设置为 0?

谢谢,我确定我遗漏了一些简单的东西。

【问题讨论】:

    标签: assembly 6502


    【解决方案1】:

    怎么样

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

    请注意,所有其他位都不会被触及,因为1 AND X 对于每个位始终是X。由于0 AND X 始终为0,因此只有位 0 发生变化。

    【讨论】:

    • 谢谢。我知道这很简单,我一定在我的文档中遗漏了这一点。
    • 您的意思可能是“and”,而不是“eor”。
    • 如果您喜欢冒险,您还可以使用未记录的操作码“SAX”来组合 AND / STA 指令。假设 .X 包含您的位掩码和 .A 状态字节(反之亦然),SAX 是一种执行 AND、存储结果并保持 CPU 状态标志不变的巧妙方法。
    • 请不要使用未记录的操作码......永远。您的代码将导致 65816 崩溃。
    【解决方案2】:

    我对 6502 并不特别熟悉,但要清除一点,您通常会使用一个值,除了您要清除的那个之外,每个位都已设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      相关资源
      最近更新 更多