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?
谢谢,我确定我错过了一些简单的事情。
答案 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,但是为了清楚一点,除了要清除的值之外,还要设置一个除了你设置的位之外的值。