Операция вычитания целых чисел.

Операция сложения целых чисел.

Основы двоичной арифметики.

Принципы выполнения арифметических операций в ЭВМ.

 

Сложение n- разрядных целых чисел реализуется на основе n- разрядного комбинационного сумматора который может быть построен из модулей одноразрядных сумматоров путем их соединения по цепям переноса.

Не зависимо от способа интерпретации целых чисел знаковое или беззнаковое их сложение осуществляется идентично путем поразрядного сложения с учетом возникающих переносов .Основным отличием сложения знакового и беззнакового является способ фиксации возможного переполнения.

Для беззнаковых чисел переполнение фиксируется при возникновении переноса из старшего разряда .Этот перенос в процессорах 80Х86 фиксируется во флаге CF-carry flag.

Для знаковых чисел фиксация фиксируется во флаге OF-overflow flag.

Таким образом при программировании на Ассемблере после выполнения сложения беззнакового необходимо проверять CF, а после знакового OF.

Использование именно дополнительного кода в представлении знаковых целых чисел позволяет существенно упростить принцип их сложения и вычитания по сравнению с использованием прямого кода.

Примеры сложения: n=6

-32<=Aз<=31

0<=Aб<=63

A+B=C

A= -11 1.10101

B= -20 +1.01100

----------

C= -31 1.00001

зн. беззн.

A=11 0.01011 11 11

B=-20 1.01100 -20 44

-----------

C= -9 1.10111 -9 55(55)

 

Переполнение при знаковом сложении и способы его фиксации.

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

зн. беззн.

A=17 0.10001 17 17

B=19 0.10011 19 19

----------

C= 1.00100 -28? 36(36)

зн. беззн.

A= -17 1.01111 -17 47

B= -19 1.01101 -19 45

-----------

C= 0.11100 28? 28?(92)

Переполнение при сложении знаковых целых чисел можно фиксировать одним из двух способов:

1) Сравнением знаков операндов и результата (при наличии ++ или - - знаков операндов и - или + соответственно в знаке результата фиксируется переполнение).

2) Сравнение переносов из двух старших разрядов (при наличии одного и только одного переноса фиксируется переполнение).Именно этот способ используется в процессорах корпорации INTEL для установки флага OF.

 

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

1) Сведением к сложению путем предварительного изменения знака второго операнда. При использовании дополнительного кода изменение знака предполагает операцию дополнения над ним ,то есть invert,+1.

2) Выполнение прямого(непосредственного) вычитания по аналогии со сложением вычитание выполняется поразрядно начиная с младших разрядов с учетом возникающих межразрядных заемов.

Таблица истинности одноразрядного двоичного вычитателя имеет вид:

ai bi zi-1 ri zi

0 0 0 0 0

0 0 1 1 1

0 1 0 1 1

0 1 1 0 1

1 0 0 1 0

1 0 1 0 0

1 1 0 0 0

1 1 1 0 1

a i - i-й разряд уменьшаемого.

b i - i-й разряд вычитаемого.

z i-1 - заем из предыдущего разряда.

z i - заем в последующий разряд.

Примеры: n=6

зн. беззн.

A= -13 1.10011 -13 51

B= -28 1.00100 -28 36

-----------

C= 0.01111 15(15) 15(15)

 

A= -28 1.00100 -28 36

B= -13 1.10011 -13 51

-----------

C= 1.10001 -15(-15) 49?

Для беззнакового вычитания результат не корректный .Факт получения не корректного числа объясняется вычитанием из меньшего большего то есть результат должен быть отрицательным. О факте получения отрицательного беззнакового результата свидетельствует заем в старший разряд .Этот заем при выполнении вычитания фиксируется во флаге CF. Если от полученного результата взять дополнение то получается правильный результат равный 15. В связи с этим при наличии заема в старший разряд полученный результат можно интерпретировать как беззнаковый дополнительный код.