§ Общая информация

Что есть быть флаг переноса из 3 в 4 разряд? Он устанавливается тогда, когда при сложении (или вычитании) младших 4 бит происходит перенос (или заем) флага из одного разряда в другой разряд.
Пример
 1111
+0010
-----
10001
Как можно заметить, при сложении появился новый бит, который не укладывается в привычную картину Мироздания. Отметим, что перенос существовал. Флаг A станет равным единице.
Есть простой способ проверить полуперенос, это просто сложить два числа и проверить, что результат больше или равен числу 16 (10000 в двоичной системе).
Также, легко проверить с вычитанием. Известно, что если число A >= B, то при вычитании A-B, если переноса нет, значит, переноса нет (спасибо, Кэп!). То есть, достаточно просто вычесть младшие 4 бита один из другого и проверить, установлен ли разряд 4 в результата, или нет. Если установлен, то флаг AF=1, иначе AF=0. Здесь AF - это результирующий флаг, естественно.

§ Универсальный метод проверки

Есть один универсальный метод проверки переноса. Всё до крайности просто и максимально понятно, я надеюсь.
Берем сложение. Допустим, надо сложить 2 числа, восьмибитных. Допустим, складываем. Что получается? Есть исходный A, B и результирующий C.
     76543210
A =  11010011
B =  00101110
C = 100000001
        ^
Теперь, я обращу всё ваше пристальное внимание на бит 4. Представим на мгновение, что нет никаких битов 0,1,3,4, или они равны нулю. Да, пускай они будут равны нулю для прикола. Как себя будет вести сложение в разряде 4? Дело в том, что из-за схемы полусумматора, с которым можно превосходно ознакомиться на разного рода ресурсах, сложение младшего бита представляет из себя XOR:
C[4] = A[4] ^ B[4]
И никак иначе! То есть, если из младшего бита (3-его) нет никакого переноса, то это будет так всегда. А что, если заем есть? Что, если при A[4]^B[4] не получится результат C[4]? Это говорит только об одном и единственном: был перенос!
Вот и все. Так что, если C[4] != A[4] ^ B[4], то тогда перенос был. Это однозначно.
Логическая схема для обнаружения полупереноса:
AF = A[4] ^ B[4] ^ C[4]
Здесь я неравенство заменил на xor, потому что это равнозначно, если вспомнить таблицу истинности xor.
Аналогично, та же самая схема будет при вычитании, потому что вычитание это тоже самое, что и сложение, просто там будет развернут бит B[4], но суть никак от этого не поменяется. Полусумматор это все равно то же самый XOR, вход B лишь инвертируется (что ничего не меняет).
7 окт, 2021
© 2007-2022 Слабая хрень сидела