Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PRINT.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.1 Mб
Скачать

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

Операции сложения и вычитания целых чисел без знака.

При осуществлении операций с двоичными целыми числами без знака используется обычная двоичная арифметика, включающая как операцию сложения, так и операцию вычитания, используя только прямые коды чисел. Поскольку операции умножения и деления сводятся к операциям сложения, вычитания и сдвига, то это также справедливо и для них. При этом перенос из старшего разряда при сложении и заем при вычитании сопровождается установкой в 1 флага CF. При сложении, это характеризует переполнение разрядной сетки, а при вычитании – получения отрицательного результата. В этом последнем случае, результат получается представленным в дополнительном коде. Переполнения разрядной сетки при операции вычитания не может быть принципиально.

Отметим, при этом, что при операциях сложения и вычитания целых чисел без знака, флаг OF не определен.

Примеры:

11011011+ 10100011 = 1: 01111110 : В результате операции произошел перенос из старшего разряда. Следовательно, произошло переполнение разрядной сетки и результат является недостоверным. (219 + 163 = 382)

Состояние флагов: ZF=0; AF=0; PF=1; CF=1;

10011001 + 01100011 = 11111100Переноса из старшего разряда нет, результат достоверный. (153+99=252).

Состояние флагов: ZF=0; AF=0; PF=1; CF=0:

11010101- 10110010= 00100011: Результат положителен и представлен в прямом коде.(213 – 178 = 35).

Состояние флагов: ZF=0; AF=0; PF=0; CF=0.

10101110 – 11000110=1: 11101000: Перенос из старшего разряда свидетельствует о том, что уменьшаемое меньше вычитаемого. (Можно сказать, что результат является как бы отрицательным, и представлен в дополнительном коде)

(174 – 198 = −24). Состояние флагов: ZF=0; AF=0; PF=1; CF=1.

Операции сложения и вычитания целых чисел со знаком.

При представлении целых чисел со знаком, старший разряд кода является разрядом знака, в котором положительные числа кодируются 0, а отрицательные – 1. При этом, положительные числа представляются прямым кодом, а отрицательные – дополнительным. Так они хранятся и в оперативной памяти компьютера.

При сложении целых чисел со знаком операция сводится к обычному сложению кодов чисел, включая и знаковый разряд. При осуществлении операции вычитания, код вычитаемого преобразуется в дополнительный код (учитывая и знаковый разряд) и суммируется с кодом уменьшаемого.

Знак результата и в том, и в другом случае определяется автоматически по состоянию знакового разряда. Признак переполнения разрядной сетки результата, в этом случае, определяется функцией неравнозначности переносов в знаковый разряд результата и из его знакового разряда. Если же при осуществлении операции имеются оба этих переноса, или они оба отсутствуют, то переполнения разрядной сетки отсутствует и результат является достоверным.

Для упрощения определения переполнения разрядной сетки сумматора, числа со знаком в современных компьютерах, непосредственно в операционном узле, обрабатываются, будучи представленными, в модифицированных кодах. Модифицированные коды отличаются от обычных кодов только тем, что для знака числа в них выделяется не один, а два разряда. При этом положительные числа характеризуются значением 00 этих разрядов, а отрицательные – 11.

Если же результат операции будет иметь в знаковых разрядах значения 10 или 01, это будет характеризовать отрицательное (10) или положительное (01) переполнение разрядной сетки и результат должен быть признан недостоверным. Это следует из функции неравнозначности указанных выше переносов.

Приведем примеры арифметических операций с числами, представленными в модифицированных кодах.

Примеры:

  1. 111001101 + 110101111 = 1: 101111100: (− 51) + (− 81) = (− 132).

Состояние флагов: OF=1; SF=0; ZF=0; AF=1; PF=0; CF=1.

Переноса в знаковый разряд нет, но перенос из знакового разряда есть (знаковые разряды результата 10). Следовательно, имеет место отрицательное переполнение разрядной сетки и результат недостоверный.

2. 001010101 + 001001011 = 010100000 : (+85) + (+ 75) = (+160).

Состояние флагов: OF=1; SF=1; ZF=0; AF=1; PF=1; CF=0.

Перенос в знаковый разряд есть, но переноса из разряда нет (знаковые разряды результата 01). Следовательно, имеет место положительное переполнение разрядной сетки и результат недостоверный.

3. 000010011 + 001001111 = 001100010 : (+ 19) + (+79) = (+98).

Состояние флагов: OF=0; SF=0; ZF=0; AF=1; PF=0; CF=0.

Нет переносов ни в знаковый разряд, ни из знакового разряда (знаковые разряды результата 00). Следовательно, результат достоверный, положительный, в прямом коде

4. 110011110 +111110001 = 1: 110001111: (−98) + (−15) = (−113).

Состояние флагов: OF=0; SF=1; ZF=0; AF=0; PF=0; CF=1.

Есть перенос и в знаковый разряд и из знакового разряда результат достоверный, отрицательный (знаковые разряды результата 11) и представлен в дополнительном коде.

5. 000111011 − 111011011→ 000111011 + 000100101 = 001100000: (+ 59) − (− 37) = (+ 96).

Состояние флагов: OF=0; SF=0; ZF=0; AF=1; PF=1; CF=0;

Переносов в знаковый разряд и из знакового нет (знаковые разряды результата 00). Результат достоверный, положительный, в прямом коде.

6. 110110111 − 001000101→110110111+ 110111011 = 1: 101110010: (− 73) − (+ 69) = (− 142).

Нет переноса в знаковый разряд, но есть перенос из знакового разряда (знаковые результата 10): результат недостоверный, имеет место отрицательное переполнение разрядной сетки.

Состояние флагов: OF=1; SF=0; ZF=0; AF=1; PF=1; CF=1.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]