
- •«Разработка программ преобразования форматов двоичных данных и сортировок в машинных кодах микро-эвм см-1800 с помощью эмулятора на пк»
- •Задание
- •Содержание
- •Аналитическая часть
- •1.1 Двоично-десятичное кодирование
- •1.2 Операции двоично-десятичной арифметики
- •1.3 Кодирование текстовых данных
- •2 Практическая разработка
- •2.1 Блок – схема алгоритма
- •2.2 Распределение памяти и листинг программы с комментарием
- •2.3 Результаты тестирования программы
- •3 Описание использованных при проектировании средств вычислительной техники
1.2 Операции двоично-десятичной арифметики
Операции двоично-десятичной арифметики выполняются в два этапа: собственно операция и коррекция.
Необходимость коррекции объясняется упомянутыми выше запрещенными комбинациями. Они возникают в результате сложения в связи использованием лишь 10 возможных комбинаций из 16. Поэтому правила операций в двоично-десятичной системе таковы:
- при сложении двоично-десятичных чисел каждый раз, когда происходит перенос бита в старший полубайт, необходимо к полубайту, от которого произошёл перенос, добавить корректирующее значение 0110;
- при сложении двоично-десятичных чисел каждый раз, когда встречается недопустимая для полубайта комбинация, необходимо к каждой недопустимой комбинации добавить корректирующее значение 0110 с разрешением переноса в старшие полубайты;
- при вычитании двоично-десятичных чисел для каждого полубайта, получившего заём из старшего полубайта, необходимо провести коррекцию, отняв значение 0110.
Пример сложения десятичных чисел 3927 и 4856:
В двоично-десятичной форме эти числа будут выглядеть: 3927 = 0011 1001 0010 0111, а 4856 = 0100 1000 0101 0110
Складываем числа по правилам двоичной арифметики:
* **
0011 1001 0010 0111
+ 0100 1000 0101 0110
___________________
= 1000 0001 0111 1101 - Двоичная сумма
+ 0110 0110 - Коррекция
___________________
1000 0111 1000 0011
* — тетрада, из которой был перенос в старшую тетраду
** — тетрада с запрещённой комбинацией битов
Коррекция в обоих случаях состоит в добавлении 6, а причины коррекции таковы:
1) в тетраду, помеченную символом *, добавляем 6, т.к. по правилам двоичной арифметики перенос унёс с coбой 16, а по правилам десятичной арифметики должен был унести 10;
2) в тетраду, помеченную символом **, добавляем 6 и разрешаем распространение переноса, т.к. комбинация битов 1101 (соответствующая десятичному числу 13) является запрещённой.
Вычитание двоичных чисел может производиться в прямом коде (с созданием заема из старшего разряда), в обратном коде (необходимо учитывать циклический перенос из знакового разряда в младший разряд результата) и в дополнительном коде. В ЭВМ наиболее часто используется дополнительный код.
Рассмотрим пример вычитания с заемом для десятичных чисел: 5648 - 2739 = 2909.
564810 = 0101 0110 0100 1000BCD
273910 = 0010 0111 0011 1001BCD
% 1010 % 1010
0101 0110 0100 1000
- 0010 0111 0011 1001
======================
0010 1001 0000 1001 BCD
2 9 0 910
Знаком % отмечен разряд, из которого берется заем в младший (в размере 1010 = 10102). Получен результат 0010 1001 0000 1001 в двоично-десятичной системе, что соответствует 2909 в десятичной.
Те же операции в дополнительном коде будут выполнены так:
а) получаем дополнительный код для вычитаемого путем обращения разрядов и прибавления 1:
____ ____ ____ ____
0010 0111 0011 1001 = 1101 1000 1100 0110
+ 1
======================
1101 1000 1100 0111 BCD
б) складываем первое число и дополнительный код второго:
0101 0110 0100 1000
+ 1101 1000 1100 0111
======================
1 0010 1111 0000 1111
* ** * **
Здесь знаком * помечена тетрада, дающая перенос в высший разряд, а ** - тетрада с запрещенной комбинацией. Перенос игнорируется.
в) проводим коррекцию запрещенных тетрад вычитанием 6:
0010 1111 0000 1111
- 0110 0110
====================
0010 1001 0000 1001BCD
2 9 0 910