Арифметические операции
В этом разделе рассматриваются основные способы записи чисел в базовой ЭВМ, арифметические операции, выполняемые с этими числами, и команды, инициирующие арифметические операции.
Целые двоичные числа без знака можно использовать для представления нуля и целых положительных чисел.
При размещении таких чисел в одном 16-разрядном слове они могут изменяться
от 0000 0000 0000 0000
2 = 0000
16 = 0
10
до 1111 1111 1111 1111
2 = 1FFF
16 = (215 - 1)
10 = 65535
10.
Подобные числа (так же, как и рассмотренные ниже двоичные числа со знаком) относятся к числам с фиксированной запятой, разделяющей целую и дробную части числа. В числах, используемых в базовой ЭВМ, положение запятой строго фиксировано после младшего бита слова.
Целые двоичные числа со знаком используются тогда, когда необходимо различать положительные и отрицательные числа. В них старший бит используется для кодирования знака:
0
- для положительных чисел1
- для отрицательных чисел.
Отрицательные числа представлены в дополнительном коде. Это упрощает конструкцию ЭВМ, так как при сложении двух таких чисел, имеющих разные знаки, не требуется переходить к операциям вычитания меньшего (по модулю) числа из большего и присвоения результату знака большего числа.
Рассмотрим простое правило для получения дополнительного кода двоичного числа (для примера взято двоичное число, эквивалентное числу 70910):
-
Получить инверсию заданного числа (все его 0 заменить на 1, а все 1 - на 0):
0 000 0010 1100 0101 - Число 1 111 1101 0011 1010 - Инверсия числа
-
Образовать дополнительный код заданного числа путем добавления 1 к инверсии этого числа:
1 111 1101 0011 1010 - Инверсия числа + 0 000 0000 0000 0001 - Слагаемое 1 ———————————————————————————————————————— 1 111 1101 0011 1011 - Дополнительный код числа
-
Проверим правильность вычисления дополнения путем сложения заданного числа и его дополнения:
0 000 0010 1100 0101 - Число + 1 000 0010 1100 0101 - Прямой код ———————————————————————————————————— 1 000 0101 1000 1010 - Дополнительный код числа
Так как перенос из старшего разряда выпадает за пределы разрядной сетки, то он не учитывается. Оставшаяся же 16-разрядная сумма равна нулю, что подтверждает правильность преобразования.
-
Сложение целых двоичных чисел со знаком и без знака выполняется в базовой ЭВМ с помощью команды ADD.
-
Увеличение на 1 (INCREMENT) и уменьшение на 1 (DECREMENT).
По команде INC к содержимому аккумулятора прибавляется единица, а по команде DEC - единица вычитается. Если при этом возникает перенос из старшего разряда А, то в регистр переноса заносится 1, в противном случае в него заносится 0. -
Вычитание (X-Y) может выполняться путем сложения уменьшаемого X и дополнительного кода вычитаемого Y. Однако это требует записи и выполнения нескольких команд (CLA, ADD Y, CMA, INC, ADD X). Для сокращения программ и времени выполнения вычитания в базовой ЭВМ предусмотрена команда SUB Y (CLA, ADD X, SUB Y), которая реализует те же действия за меньшее время.
-
Умножение и деление. В базовой ЭВМ нет команд для выполнения этих действий (АЛУ не выполняет таких операций).Поэтому произведение и частное приходится получать программным путем.
-
Сложение с переносом (ADC M).
ADC
позволяет выполнить сложение(A)
,(M)
, и(C)
, обеспечивая корректное сложение чисел больше разрядности аккумулятора. Формат команды:5XXX
, гдеXXX
- адрес операнда.
Пример операции:(A) + (M) + (C) -> A
.