Книга: Цифровые вычислительные устройства и микропроцессоры приборных комплексов
Коррекция 0 1 1 0
Результат 0 0 1 1
Пример 1.5 . Сложить десятичные двоично-кодированные числа (BCD-числа), расположенные в A и R7:
ADD A,R7 ; двоичное сложение
DA A ; коррекция результата
Алгебраическое сложение с использованием дополнительного кода . Для сложения чисел со знаком необходимо отрицательное число перевести в дополнительный код. В двоичной системе счисления дополнительный код отрицательного числа формируется по следующему правилу: инвертируются (путем замены 0 на 1 и 1 на 0) цифры всех разрядов, кроме знакового, и в младший разряд прибавляется единица. Например, если =1 101102 , то = 1 010102 (знаковые разряды выделены полужирным шрифтом). Обратное преобразование из дополнительного кода в прямой код производится по тому же правилу.
Рассмотрим примеры выполнения операции сложения.
Пусть =0 10110, =1 01101.
Переносы 1 1 1 1
Первое слагаемое 0 1 0 1 1 0
Второе слагаемое 1 1 0 0 1 1
Сумма 0 0 1 0 0 1
Как указывалось выше, перенос, возникающий из знакового разряда, отбрасывается.
Изменим на обратный знаки слагаемых (по отношению к предыдущему примеру): =1 10110, =0 01101. Очевидно, ожидаемый ответ = 1 01001.
Переносы 1
Первое слагаемое 1 0 1 0 1 0
Второе слагаемое 0 0 1 1 0 1
Сумма 1 1 0 1 1 1
Сумма 1 0 1 0 0 1
Таким образом, если результат сложения есть отрицательное число, то оно оказывается представленным в дополнительном коде.
Для вычитания 8-разрядных чисел без знака может быть использовано выражение , где – поразрядная инверсия . Другой способ вычитания может быть основан на следующем выражении: .
Пример 1.6 . Вычитание байтов. Операция вычитания может быть выполнена двумя способами: переводом вычитаемого как отрицательного числа в дополнительный код с последующим сложением; переводом уменьшаемого в обратный код с последующей инверсией суммы.
Пусть требуется вычесть из A содержимое регистра R6. Вычитание выполнить в соответствии с выражением . Установка флага C после выполнения сложения будет свидетельствовать об отрицательном переполнении.
CPL A ; инверсия аккумулятора
ADD A,R6 ; сложение
CPL A ; инверсия суммы (получение разности)
Пример 1.7 . Получить разность 2-байтных чисел без знака. Операнды располагаются в РПД. Адрес уменьшаемого хранится в R1, а вычитаемого – в R0. Результат поместить на место уменьшаемого:
; вычисление Z = X–Y
; X, Y – РПД