флаг половинного переноса / неполного заимствования в инструкции DAA - PullRequest
5 голосов
/ 01 декабря 2011

Прошу прощения за то, что сделал этот мой второй вопрос по DA80 для Z80 - я в значительной степени реализовал эту инструкцию сейчас, но есть одна вещь, в которой я не уверен - флаг H установлен этой инструкцией вообще? В руководстве по Z80 написано «см. Инструкцию», но в нем упоминается только флаг перед DAA, а не после его выполнения.

Я установил флаги следующим образом:

S устанавливается, если результат отрицательный (0x80 и результат равен 0x80) Z устанавливается, если результат равен нулю H (не уверен, следовательно, этот вопрос) P / V устанавливается на четность результата (1, если четный, 0, если нечетный) N остается один C устанавливается, если верхний клочок исходного значения аккумулятора изменен

Кроме этого, инструкция, кажется, работает так, как я ожидаю :-) Я надеюсь, что кто-то может прояснить это для меня, большое спасибо.

Ответы [ 2 ]

2 голосов
/ 01 декабря 2011

Я мог только найти здесь , что флаг половинного переноса / заимствования изменен DAA.

Я рекомендую установить этот флаг точно так же, как флаг AF (вспомогательный перенос)устанавливается инструкциями DAA и DAS на процессорах x86.Я не вижу причин, по которым между i8080 / i8085 / Z80 и i8086 и DA80 / DAS i8086 должна быть какая-либо разница.

x86 DAA / DAS устанавливает AF в 1, если он устанавливает младшие 4 бита аккумулятора с6. Если он не настраивает их, он сбрасывает AF на 0.

См. Псевдокод для DAA и DAS в руководствах по процессорам Intel (или AMD) x86.

2 голосов
/ 01 декабря 2011

Хороший вопрос. Да, поведение флага H четко не задокументировано, потому что это поведение нестандартно с DAA.

Если младший полубайт (младшие четыре бита) A является неосновным числом 10 (больше 9, как A, B, C, D, E или F), установлен флаг или H, 6 добавлено в реестр. Это означает, что даже если нижний полубайт находится в диапазоне 0-9, вы можете принудительно добавить 6 в регистр A, установив флаг H.

Когда дело доходит до вашего вопроса, H flag обычно остается в моем опыте нетронутым, но вы не можете полагаться на это, потому что говорят, что "эффект нестандартен", что означает, что флаг H может измениться или может не меняться в зависимости от ситуации. В подобных случаях вы всегда должны думать, что на флаг H влияет команда DAA после выполнения, даже если вы видите, что это не затрагивается в ваших тестах.

...