vak: (Знайка)
[personal profile] vak
Есть в процессоре 8086 регистр флагов. Отдельные биты в нём что-то говорят о результате предыдущей команды: перенос, чётность, промежуточный перенос, ноль, знак, пошаговый режим, разрешение прерываний, направление, переполнение. Всё для удобства программиста, казалось бы. Но есть и подстава.

Некоторые флаги после некоторых команд содержат мусор. В интеловской документации эти флаги обозначены как U, то есть Undefined. Смотрите таблицу 2-21 со страницы 2-51 в документе The_8086_Family_Users_Manual_Oct79.pdf. Там дофига этих U.

На практике оказалось, что не всё так плохо. Многие из флагов, обозначенные как Undefined в документации, на самом деле прекрасно вычисляются симулятором и соответствуют чипу. Вот таблица флагов, которые действительно не удаётся предсказать.
  • Команды AAA, AAS - флаги OF, PF, SF, ZF - Переполнение, чётность, знак и ноль не определены
  • Команды DAA, DAS, AAM, AAD - флаг OF - Переполнение не определено
  • Команда RCR - флаг OF - Переполнение определено только для однократного сдвига (count=1); не определено, когда count!=1
  • Команды SAL, SHL - флаг AF - Дополнительный перенос не определен
  • Команда MUL - флаги PF, ZF - Чётность и признак нуля не определены для словного беззнакового умножения; для байтового все флаги определены
  • Команда IMUL - флаги PF, AF, ZF, SF - Чётность, дополнительный перенос, знак, признак нуля не определены
  • Команды DIV, IDIV - флаги CF, OF, SF, ZF, PF, AF - Все арифметические флаги не определены
Мой симулятор прошёл 100% всех потактовых тестов от Intel P80C86A-2 и AMD D8088. Его можно считать эталонной реализацией. Если есть вопросы по работе процессорных инструкций 8086 - смотрите соответствующее место в исходнике processor.cpp.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org