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

2.3 Арифметична операція додавання/віднімання знакових чисел в bcd кодах

В загальному випадку перед додаванням/відніманням необхідно проводити аналіз знаків операндів і формування при необхідності доповнюючих кодів операндів. Алгоритм додавання/віднімання BCD чисел зі знаком повинен обов'язково враховувати знаки операндів. Під знак в двійково-десятковому кодуванні відводиться старша тетрада: знаку "+" відповідає код 0000, знаку "-" код 1001. При перетворенні BCD-кодів з прямого в доповнюючий і навпаки змінюються лише цифрові розряди, знакові розряди зберігають своє значення. Однак, при безпосередньому виконанні арифметичних операцій над заковими розрядами поряд з цифровими виконуються операції додавання/віднімання і їх значення також підлягають десятковій корекції.

Наприклад, a) виконання операції над BCD-кодами 428 -316 =112,

доповнюючий BCD-код числа 316 після виконання (1) буде рівний 684:

0000 0100 0010 1000 ; +428

+1001 0110 1000 0100 ; Yдоп= -684

1001 1010 1010 1100

0110 0110 0110 ; DAA

1010 0001 0001 0010

0110 ; DAA

1 0000 0001 0001 0010

+ 1 1 2

б) виконання операції над BCD-кодами - 428 -316 = - 744,

доповнюючий BCD-код чисел 428 і 316 після виконання (1) буде віповідно рівний 572 і 684:

1001 0101 0111 0010 ; -572

+1001 0110 1000 0100 ; -316

10010 1011 1111 0110

0110 0110 0110 0000 ; DAA

11001 0010 0101 0110

- 2 5 6 , ; доповнюючий код.

Прямий код результату - (1000-256) = -744

Перетворення чисел двійково-десяткового формату в двійковий формат і з двійкового формату в bcd-коди.

Для ефективного використання множини арифметичних команд МП КР580 застосовуються алгоритми перетворення з формату BCD у двійковий формат і навпаки, так як мікропроцесор КР580ВМ80А може виконувати додавання і віднімання над двійковими і двійково-кодованими десятковими (BCD-формат) числами.

Розглянемо алгоритм переведення 8-бітного двійкового цілого беззнакового числа в упаковане двійково-кодоване десяткове число. В упакованому BCD-числі кожен байт містить по дві двійково-десяткові цифри. Нехай в акумулятор записано байт, який інтерпретується як двійкове ціле беззнакове число (діапазон від 0 до 255), і необхідно утворити в парі регістрів HL його представлення як упакованого десяткового числа. Простий спосіб полягає в тому, щоб спочатку визначити цифру сотень шляхом віднімання 100 від даного двійкового числа. Далі послідовним відніманням 10 знаходиться цифра десятків. Після цього в акумуляторі залишається цифра одиниць. Віднімання сотень і десятків виконується до отримання від'ємної різниці з підрахунком числа віднімань, після цього відновлюється залишок додаванням до від'ємної різниці 100 (або 10).

Приклад програми перетворення 8-бітного цілого беззнакового числа в упаковане двійково-десяткове число :

BBCD: MVI H,-1

L100: INR H

SUI 100

JNC L100

ADI 100

MVI L,-1

L10: INR L

SUI 10

JNC L10

ADI 10

MOV C,A

MOV A,L

RRC

RRC

RRC

RRC

ORA C

MOV L, A

HLT

Розглянем алгоритм перетворення упакованого десяткового цілого цілого беззнакового числа у двійкове. Нехай в акумуляторі знаходиться байт, який представляє упаковане двійково-десяткове число (діапазон від 0 до 99), і необхідно утворити в акумуляторі еквівалентне двійкове число. Алгоритм перетворення полягає в тому, щоб старшу тетраду акумулятора (цифру десятків) домножити на десять і додати до отриманого добутку молодшу тетраду (цифру одиниць). Найпростіше множення на 10 (в двійковому коді 1010 В) виконується шляхом множення цифри на 8 (зсув на три біти вліво) і додавання цифри, домноженої на 2 (зсув на 1 біт вліво).