Флаги переполнения и переноса

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

5
задан freezie 31 янв. '10 в 22:03
источник поделиться
3 ответов

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

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

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

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

5
ответ дан Arthur Shipkowski 31 янв. '10 в 22:26
источник поделиться

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

1
ответ дан John Knoeller 31 янв. '10 в 22:14
источник поделиться

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

0
ответ дан Jim Lewis 31 янв. '10 в 22:17
источник поделиться

Другие вопросы по меткам или Задайте вопрос