Структурная организация МК48.
Основой структуры МК48 является процессор. Основа процессора – 8-разрядное АЛУ, которое выполняет арифметические, логические, сдвиговые операции над данными в двоичном и двоично-десятичном коде. Основной элемент АЛУ – восьмиразрядный аккумулятор. Имеется схема десятичной коррекции (СДК), предназначенная для обработки двоично-десятичных данных.
Представления чисел в двоичном и двоично-десятичном виде отличаются. Речь пойдет о числе, занимающем 8 двоичных разрядов (байте). В двоично-десятичном (BCD) представлении байт разбивается на два полубайта (тетрады) и в каждую тетраду записывается цифра в двоичном виде. Например, число 35, записанное в BCD-формате будет иметь вид: 00110101. Как видно из примера, в старшей тетраде записана цифра 3, а в младшей цифра 5. Для записи числа имеющего большую разрядность потребуется и больше тетрад. Диапазон BCD-чисел, занимающих один байт равен 0…99. Еще примеры: десятичное число 83=10000011 в BCD-формате,
64=01100100.
Обратите внимание, что эти числа в двоичной системе будут иметь другое представление: 83=01010011 64=01000000.
При выполнении арифметических операций над BCD-числами, так как процессор представляет числа только в двоичном виде, может получиться неверный результат. Например, сложим два числа, представленные в BCD-формате. Это числа 69 и 27.
69(BCD)=01101001, 27(BCD)=00100111.
Процессор произведет сложение по правилу сложения двоичных чисел и получит в результате: + 01101001
00100111
Если продолжать рассматривать результат в BCD-формате, то получим неверный результат. Получили 90(BCD), а должны были получить 96(BCD).
Другой пример.
19(BCD)=00011001,66(BCD)=01100110.
+ 00011001
01100110
Получилось число, младшая цифра которого выходит за пределы максимального представления чисел в BCD-формате.
Для того чтобы и в первом и во втором примере скорректировать результат, то есть получить верное BCD-представление числа, используется схема десятичной коррекции, которая исправляет результат любой арифметической операции по команде DA A.
По команде DA A выполняется:
1.Если младшая тетрада результата больше 9 или при выполнении операции был перенос из 3 разряда в 4, то к младшей тетраде добавляется 6(0110).
В первом примере был перенос из 3 разряда в 4. Поэтому команда DA A добавит к результату 0110, и правильный результат будет 10010110. Для второго примера после добавления 0110, так как младшая тетрада больше 9, получится результат
+01111111
0110
10000110, равный в BCD-представлении 85.
2.Если старшая тетрада результата больше 9 или был перенос из 7 разряда, то к старшей тетраде добавляется 0110=6.
Вывод. Если в программе числа представлены в BCD-формате, то после арифметических команд в программе необходимо вставлять команду DA A.