В регистре флагов процессоров Z80, 8080, 8085 и 8086 для чего предназначены биты 1, 3, 5, которые задокументированы как «зарезервированные» или «неопределенные»?
Какова цель зарезервированного/неопределенного бита в регистре флагов?
Ответы (1)
Эти биты не используются; то есть ни одна инструкция явно не устанавливает для них какое-либо значение. Разработчики решили, что 5/6 флагов достаточно, и просто оставили оставшиеся биты регистра флагов неиспользованными.
Они задокументированы как «неопределенные», потому что невозможно заранее узнать, какое значение они будут иметь после выполнения любой из инструкций - в этом случае конструкция процессора проще, чем при явной установке их на 0 или 1.
Теперь, строго говоря, по крайней мере для Z80, эти флаги делают на самом деле получают предсказуемое значение — в конце концов, процессор всегда будет выдавать один и тот же результат и переходить во внутреннее состояние при одной и той же комбинации входных данных. и предыдущее внутреннее состояние. Например, этот документ о недокументированных инструкциях Z80 говорит о CPI следующее:
Флаги 3 и 5 устанавливаются следующим образом: возьмите A, вычтите последний (HL), а затем уменьшите его на 1, если был установлен флаг H (/после/ CP). Бит 1 этого значения — флаг 5, бит 3 — флаг 3.
Дело, однако, в том, что такое поведение является непреднамеренным — просто побочным эффектом — и не гарантируется, что оно будет присутствовать в будущих итерациях процессоров. Вот почему они задокументированы как просто «неопределенные», например, «они бесполезны для вас, поэтому просто игнорируйте их».
Обратите внимание, что в то время как на Z80 все биты регистра F
могут быть установлены в любое состояние, на i8080 биты 3 и 5 (соответствующие недокументированным флагам Z80) всегда считываются как нулевые, а бит 1 (соответствующий флагу N Z80) всегда читается как один.