Определение подписанного переполнения (x86 Overflow / Auxilliary Flags) - PullRequest
0 голосов
/ 26 февраля 2012

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

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

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

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

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

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

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

1 Ответ

1 голос
/ 26 февраля 2012

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

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

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

...