Определение подписанного переполнения (x86 Overflow / Auxilliary Flags)

Прежде всего: я действительно пытался найти подходящий ответ на этот вопрос, но мне это не удалось.

В настоящее время я работаю над небольшим эмулятором 8086. Что я до сих пор не понял, так это то, как флаги Overflow и Auxilliary рассчитываются лучше всего для сложения и вычитания.

Насколько я знаю, вспомогательный флаг соответствует флагу переполнения, но использует только 4 бита, а флаг переполнения использует весь размер. Поэтому, если я добавлю два 1-байтовых целых числа со знаком, OF будет проверять переполнение 1-байтового знака, в то время как вспомогательный флаг будет рассматривать только младшие 4 байта из двух целых чисел.

Существуют ли какие-либо общие алгоритмы или "магические побитовые операции" для вычисления переполнения со знаком для сложения и вычитания 4,8 и 16 битов? (Я не против, на каком языке там написано)

Примечание: мне нужно хранить значения в переменных без знака внутри, так что у меня есть возможность работать только со значениями без знака или побитовыми вычислениями.

Может ли одно решение, которое работает для сложения и вычитания, состоит в том, чтобы проверить, изменился ли "Флаг знака" (или бит 4 для вспомогательного флага) после завершения расчета?

Заранее спасибо!

1 ответ

Решение

Флаг переполнения указывает, является ли результат слишком большим / слишком маленьким, чтобы поместиться в операнде назначения, независимо от его размера.

Вспомогательный флаг указывает, является ли результат слишком большим / слишком маленьким, чтобы поместиться в четыре бита.

Изменить: Как определить AF: Объясните, как флаг AF работает в инструкциях x86?,

Другие вопросы по тегам