Как мне установить биты в 0 с булевой арифметикой?
Все еще плохо знаком с побитовыми операциями в сборке 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 ответа
Как насчет
lda status
and #%11111110 ; set bit 0 to false
sta status
Обратите внимание, что все остальные биты не затрагиваются, так как 1 AND X
всегда X
за каждый бит. Изменен только бит 0 0 AND X
всегда 0
,
Я не знаком с 6502 конкретно, но, чтобы очистить вас, как правило, И со значением, в котором установлен каждый бит, кроме того, который вы хотите очистить.