Как мне установить биты в 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 конкретно, но, чтобы очистить вас, как правило, И со значением, в котором установлен каждый бит, кроме того, который вы хотите очистить.

Другие вопросы по тегам