[Список тем] [Вступление к этой теме] Страницы темы: [1] [2]
Основной операцией, которая используется в цифровых устройствах
при выполнении различных арифметических действий, является
алгебраическое сложение (сложение, в котором могут участвовать как
положительные, так и отрицательные числа). Вычитание легко сводится к
сложению путем изменения знака вычитаемого на обратный. Операции умножения
и деления также сводятся к сложению и некоторым логическим
действиям. Поэтому именно с операции сложения начнем рассмотрение способов
выполнения арифметических операций.
При записи кода числа будем знак числа представлять заключаемыми в кружки
цифрами 0 (для положительных чисел) и 1 (для отрицательных
чисел). Именно такими цифрами в устройствах, предназначенных для хранения
чисел, принято фиксировать знак числа в специально выделяемых
знаковых разрядах регистра флагов. Положение запятой в числе показывать не
будем.
Выполнение этой операции покажем на примере:
Переносы | 1 | 1 | ||||
Первое слагаемое N1 | (0) | 0 | 1 | 0 | 0 | 1 |
Второе слагаемое N2 | (0) | 0 | 1 | 1 | 0 | 1 |
Сумма N=N1+N2 | (0) | 1 | 0 | 1 | 1 | 0 |
Цифры разрядов суммы N=N1+N2 формируются
последовательно, начиная с младшего разряда.
Цифра младшего разряда суммы образуется
суммированием цифр младших разрядов слагаемых.
При этом, кроме цифры разряда суммы, формируется
цифра переноса в следующий, более старший разряд.
Таким образом, в разрядах, начиная со второго,
суммируются три цифры:
цифры соответствующего разряда слагаемых и
перенос, поступающий в данный разряд из
предыдущего.
Перенос равен 1 во всех случаях, когда результат
суммирования цифр в разряде равен или больше р=2
(р—основание системы счисления). При этом в
разряд суммы заносится цифра, на р единиц (т.
е. на 2) меньшая результата суммирования.
Для пояснения сущности излагаемого ниже метода рассмотрим следующий пример.
Пусть требуется сложить два десятичных
числа N1 = (0)831 и N2 = (1)376. Так как второе слагаемое —
отрицательное число, пользование приемом,
излагаемым в школьной программе, потребовало бы
последовательности действий с заемами из старших разрядов. Предусматривать в
цифровом устройстве дополнительно такую последовательность действий не
обязательно. Искомый результат может быть получен и при
использовании последовательности действий с передачей переносов в старшие
разряды, которая применяется при сложении положительных чисел.
Для этого достаточно отрицательное число (1)376
предварительно преобразовать в так называемый дополнительный
код следующим образом: во всех разрядах, кроме
знакового, запишем дополнение до девяти к цифрам
этих разрядов и затем прибавим единицу в младший
разряд. Дополнительный код для числа N2 = (1)376 есть N2доп = (1)624.
Далее произведем сложение по правилам сложения положительных чисел:
Единицы переноса показаны там, где они суммируются, а не в тех столбцах,
откуда перенос осуществлен.
Переносы | 1 | 1 | |||
Первое слагаемое N1 | (0) | 8 | 3 | 1 | |
Второе слагаемое N2доп | (1) | 6 | 2 | 4 | |
Сумма N=N1+N2 | (0) | 4 | 5 | 5 |
При сложении складываются и цифры знаковых
разрядов с отбрасыванием возникающего из этого
разряда переноса. Как видим, получен правильный
результат (действительно, 831 — 376 = 455).
В двоичной системе счисления дополнительный код
отрицательного числа формируется по следующему
правилу: инвертируются (путем замены 0 на 1 и 1 на 0)
цифры всех разрядов, кроме знакового, после чего
в младший разряд прибавляется единица. Например,
если N = (1)10110, то Nдоп = (1)01010. Обратное преобразование
отрицательных чисел из дополнительного кода в
прямой производится по тому же правилу.
Рассмотрим примеры выполнения операции.
Пример. Пусть N1 = (0)10110, N2 = (1)01101 N2доп = (1)10011.
Переносы | 1 | 1 | 1 | 1 | |||
Первое слагаемое N1 | (0) | 1 | 0 | 1 | 1 | 0 | |
Второе слагаемое N2доп | (1) | 1 | 0 | 0 | 1 | 1 | |
Сумма N=N1+N2 | (0) | 0 | 1 | 0 | 0 | 1 |
Как уже указывалось выше, перенос, возникающий
из знакового разряда, отбрасывается.
Пример. Изменим на обратные знаки слагаемых,
использованных в предыдущем примере: N1 = (1)10110,
N2 = (0)01101. Очевидно, ожидаемый ответ: N = N 1 + N 2 = (1)01001.
Переносы | 1 | |||||
Первое слагаемое N1доп | (1) | 0 | 1 | 0 | 1 | 0 |
Второе слагаемое N2 | (0) | 0 | 1 | 1 | 0 | 1 |
Сумма Nдоп=(N1+N2)доп | (1) | 1 | 0 | 1 | 1 | 1 |
Сумма N=N1+N2 | (1) | 0 | 1 | 0 | 0 | 1 |
Таким образом, если результат сложения есть отрицательное число, то оно оказывается представленным в дополнительном коде.
Вместо дополнительного кода для представления
отрицательных слагаемых может быть использован обратный
код. Обратный код отрицательных двоичных чисел
формируется по следующему правилу: цифры всех
разрядов, кроме знакового, инвертируются.
Обратное преобразование из обратного кода в
прямой производится по тому же правилу.
Рассмотрим те же примеры, используя обратный код:
Переносы | 1 | 1 | 1 | 1 | |||
Первое слагаемое N1 | (0) | 1 | 0 | 1 | 1 | 0 | |
Второе слагаемое N2обр | (1) | 1 | 0 | 0 | 1 | 0 | |
Промежуточный результат | (0) | 0 | 1 | 0 | 0 | 0 | |
Сумма N=N1+N2 | (0) | 0 | 1 | 0 | 0 | 1 |
При использовании обратного кода перенос, возникающий из знакового разряда, прибавляется в младший разряд суммы.
Переносы | 1 | 1 | ||||
Первое слагаемое Nобр | (1) | 0 | 1 | 0 | 0 | 1 |
Второе слагаемое N2 | (0) | 0 | 1 | 1 | 0 | 1 |
Сумма Nобр=(N1+N2)обр | (1) | 1 | 0 | 1 | 1 | 0 |
Сумма N=(N1+N2) | (1) | 0 | 1 | 0 | 0 | 1 |
Если результат сложения — отрицательное число, оно оказывается представленным в обратном коде.
Особенность модифицированного кода состоит
в том, что в нем предусматривается два знаковых
разряда. В обоих знаковых разрядах положительные
числа содержат нули, отрицательные — единицы.
Выполнение операции суммирования с использованием модифицированного
дополнительного или модифицированного обратного кода производится по правилам,
сформулированным выше. Если результат суммирования содержит в знаковых разрядах
комбинацию 01 или 10, это служит признаком так
называемого переполнения разрядной сетки.
Переполнение разрядной сетки — явление, при
котором результат операции содержит большее число разрядов, чем число разрядов
в устройстве, предназначенном для его хранения. При этом
некоторые разряды результата не могут быть
зарегистрированы в устройстве, они теряются и
результат оказывается ошибочным.
Пример. Пусть N1= (0)(0) 11011, N2 = (1)(1) 10101.
Переносы | 1 | 1 | 1 | 1 | 1 | 1 | ||
Первое слагаемое N1 | (0) | (0) | 1 | 1 | 0 | 1 | 1 | |
Второе слагаемое N2доп | (1) | (1) | 0 | 1 | 0 | 1 | 1 | |
Сумма N=N1+N2 | (0) | (0) | 0 | 0 | 1 | 1 | 0 |
Первое слагаемое N1доп | (1)(1) | 0 | 1 | 0 | 0 | 1 | 1 |
Второе слагаемое N2доп | (1)(1) | 1 | 0 | 0 | 0 | 1 | 1 |
Сумма | (1)(0) | 1 | 1 | 0 | 1 | 1 | 0 |
И в этом случае комбинация цифр (1)(0) в знаковых разрядах сигнализирует о переполнении разрядной сетки. Для регистрации результата без учета знаковых разрядов в данном примере требуется семь разрядов и в отведенных для него шести разрядах он не помещается.
[Список тем] [Вступление к этой теме] Страницы темы: [1] [2]