Статус флаги это 1 байтный (8 бит) системный регистр, который сделан для того что бы во время выполнения программы можно было понять, наступило то или иное событие/статус и что сделать если это установлено. В основном статусы используются для ветвления программы. Рассмотрим список флагов:
- N - negative - показывает что число отрицательное содержит 7-й бит числа, которое в случае знакового числа отвечает за знак
- V - overflow - По сути устанавливается если результат математического вычисления превысил 255 или наоборот меньше 0
- U - всегда равен 1 по этому не используется
- B - break - устанавливается при вызове PHP, BRK тоже не используется по факту в программе
- D - decimal - флаг показывает что был включен режим десятичного вычисления, такими командами как SED(включен), CLD(выключен)
- I - interupt disable - флаг показывающий что отключены прерывания устанавливается командой SEI
- Z - zero - нулевой флаг, он показывает что в результате выполнения предыдущей команды 0. На этот флаг завязаны команды ветвления BEQ и BNE, первая срабатывает если флаг Z установлен.
- С - cary - флаг переноса устанавливается при выполнение команды ADC, при SBC, при CMP устанавливается если сравниваемое значение "больше или равно" аккумулятору.
Приведу несколько примеров использования флагов в программе:
LDA tmp
BEQ itsTmpZero
BNE itsTmpNoZero
itsTmpZero:
JSR tmpZero
itsTmpNoZero:
JSR tmpNoZero
В этом примере если переменная равна 0 то программа запустит выполнения подпрограммы tmpZero, так как будет установлен флаг Z(Zero) и сработает инструкция BEQ (Branch if Eque) - перейти если результат операции равен нулю.
Кроме флага Z, интересен еще флаг Carry - флаг переноса, дело в том что он устанавливается при операции сравнения CMP (compare) - при этом если значение больше или равно то флаг будет установлен. Пример кода:
LDA tmp
CMP #$02
BCS greatOrEq ; срабатывает если значение tmp больше либо равно 2
BCC less ; если меньше
В качестве заключения:
- telegram - https://t.me/dendydevelop
- Донаты donationalert - https://www.donationalerts.com/r/nesdeveloper
- Донаты yoomoney - https://yoomoney.ru/fundraise/3tjwOQQwKPk.230209