Флаги переполнения и переноса - PullRequest
5 голосов
/ 31 января 2010

Можно ли сложить вместе два 8-битных числа со знаком и установить биты переноса и переполнения?

Ответы [ 3 ]

5 голосов
/ 31 января 2010

Согласно вашим комментариям, ваш вопрос выглядит так: «Возможно ли установить перенос и переполнение для дополнения до двух с добавлением подписанного номера?» Это. Типичная реализация состоит в том, чтобы взять исключающее ИЛИ для переноса для последнего сумматора с выносом в конце цепочки - следовательно, добавление отрицательных чисел из-за переполнения приведет к установке бита выноса и бит переполнения, который нужно установить.

Вот пример, добавьте -1 к -128:

Carry 10000 0000 
       1000 0000  (-128)
       1111 1111  (-1)
       ---------
       0111 1111 (oops, this is 127!)

Будет установлен Carry, так как последнее добавление привело к переносу - и переполнение будет установлено на основе правила выше (также обратите внимание, что -128, добавленный к -1, очевидно, не 127)

1 голос
/ 31 января 2010

У вас нет доступа к флагам в C, даже если вы можете заставить компилятор сгенерировать код, который их устанавливает, у вас нет возможности использовать их.

0 голосов
/ 31 января 2010

Вы можете написать свою собственную процедуру добавления в C, которая будет возвращать флаги переноса и переполнения для 8-битные операнды со знаком. Если вы имеете в виду биты аппаратного переноса и переполнения внутри процессор, нет, это нельзя сделать переносимым в C.

...