Флаг по полу-полугоновому/полузану в инструкции DAA

StackOverflow https://stackoverflow.com/questions/8333957

  •  26-10-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top