20 (1006363)
Текст из файла
Билет № 20. Выполнение операций над BCD-числами. Логические операции.
Алгоритмы. Реализация. ( 1)
Машина обрабатывает числа, представленные в двоичной системе счисления (СС). Привычная нам система счисления – десятичная. Т.о. требуется переводить десятичные числа в двоичные и обратно. На это тратиться время. Как уменьшить потери? Можно представлять числа в двоично-десятичной СС.
Перевод десятичного числа в двоично-десятичную СС:
-
Для представления каждой цифры числа выделяется 4 двоичных разряда (тетрада).
-
Каждая цифра числа представляется в двоичной СС.
Пример: (35)10 = (0011 0101)DD , (12)10 = (0001 0010)DD
При двоично-десятичном (д/д) кодировании в командах указывается длина операндов (пример: числа 35 и 1120 будут закодированы одним и двумя байтами, соответственно). Знак д/д числа указывается справа и занимает 4 бита.
Сложение.
Если производить сложение чисел, представленных в д/д CC, на обычном сумматоре, то получится неверный результат. Почему? В д/д CC перенос из тетрады возникает, когда в тетраде получается число ≥ 10, а двоичной СС перенос возникает, если в тетраде получилось число ≥ 16. Поэтому при сложение чисел, представленных в д/д CC, на обычном сумматоре надо использовать избыточное кодирование (до начала операции к каждой тетраде одного из операндов прибавляется число 6 (0110)DD). Пример получения избыточного кода: (359)10 = (0011 0101 1001)DD => в избыточном коде: (1001 1011 1111)DD = (9 11 15).
Алгоритм сложения:
-
Перевести один из операндов в избыточный код: к каждой тетраде операнда прибавляется число 6 (0110)DD
-
Сложить операнды и зафиксировать тетрады, из которых не было переноса.
-
В
Пример: (359)10 + (214)10 = (573)10 . Операнды: (359)10 = (0011 0101 1001)DD ; (214)10 = (0010 0001 0100)DD
-
представим (359)10 в избыточном коде: (1001 1011 1111)DD
-
произведем сложение: (1001 1011 1111 )DD
-
-
скорректируем промежуточный результат: (переносы из тетрады в тетраду запрещены!)
+ (0010 0001 0100 )DD
--------------------------
(1011 1101 0011 )DD - промежуточный результат
- - + - фиксация наличия переноса
(1011 1101 0011 )DD
+ (1010 1010 )DD
--------------------------
(0101 0111 0011 )DD = (573)10 - результат
ычесть из тетрад, из которых не было переноса, 6 (т.е. сложить с -6 = (1010)доп. код), с запретом переносов из тетрады в тетраду.
Дополнительный код.
Д/д число 25 в дополнительном коде: 100 – 25 = 75.
Алгоритм получения дополнительного кода:
-
Перевод каждой тетрады в дополнительный код: инверсия и прибавление 1 к младшему разряду младшей тетрады. Пример: (25)10 = (0010 0101)DD => (1101 1011)DD
-
Получение избыточного кода (отнимем 6 от каждой тетрады): (1101 1011)DD – (0110 0110)DD = (1101 1011)DD + (1010 1010)DD = (0111 0101)DD = (75)10
Вычитание.
Алгоритм вычитания
-
Перевод каждой тетрады вычитаемого операнда в дополнительный код: инверсия и прибавление 1 к младшему разряду младшей тетрады.
-
Сложить операнды и зафиксировать переносы.
-
Определить знак результата: если был перенос из старшей тетрады, то “+”; иначе – “-”.
-
Коррекция результата:
-
если результат положительный, то из тех тетрад, из которых не было переноса вычесть 6 с запретом переносов из тетрады в тетраду.
-
если результат отрицательный, то перевести промежуточный результат в дополнительный код и из тех тетрад, из которых был перенос вычесть 6 с запретом переносов из тетрады в тетраду.
Р
Пример: (738)10 - (291)10 = (447)10 . Операнды: (738)10 = (0111 0011 1000)DD ; (291)10 = (0010 1001 0001)DD
-
проинвертируем каждую тетраду числа (-291)10 и прибавим к младшей тетраде единицу: (1101 0110 1111)DD
-
произведем сложение: (0111 0011 1000 )DD
+ (1101 0110 1111)DD
--------------------------
(0100 1010 0111 )DD - промежуточный результат
+ - + - фиксация наличия переноса
-
знак результата – “+”, так как был перенос из старшей тетрады.
-
скорректируем промежуточный результат: (переносы из тетрады в тетраду запрещены!)
(0100 1010 0111 )DD
+ ( 1010 )DD
--------------------------
(0100 0100 0111 )DD = (447)10 - результат
Пример: (291)10 - (738)10 = (-447)10 . Операнды: (738)10 = (0111 0011 1000)DD ; (291)10 = (0010 1001 0001)DD
-
проинвертируем каждую тетраду числа (-738)10 и прибавим к младшей тетраде единицу: (1000 1100 1000)DD
-
произведем сложение: (0010 1001 0001 )DD
+ (1000 1100 1000 )DD
--------------------------
(1011 0101 1001 )DD - промежуточный результат
- + - - фиксация наличия переноса
-
знак результата – “-”, так как не было переноса из старшей тетрады.
-
скорректируем промежуточный результат: (переносы из тетрады в тетраду запрещены!)
так как знак результата – “-”, то мы получили результат в дополнительном коде, и его надо перевести теперь в прямой: (1011 0101 1001 )DD = (0100 1010 0111 )DD
скорректируем результат:
(0100 1010 0111 )DD
+ ( 1010 )DD
--------------------------
(0100 0100 0111 )DD = (-447)10 - результат
еализация вычитания.
На Рис2 приведена структурная схема устройства для выполнения операции вычитания: E – обозначение сумматора для одной тетрады, структура которого приведена на Рис1; P – разрешение переноса между тетрадами (“1” – перенос разрешен, “0” - коррекция); Тг – триггера, фиксирующие перенос между тетрадами.
Умножение.
Умножение сводится к сложению и выполняется очень долго, то есть д/д кодирование хорошо использовать при статистических обработках, где много складывают и мало умножают.
Для получения с = a*b надо прибавить a к промежуточному результату b раз. Т.е. вводится аккумулятор (Ас), который хранит промежуточный результат и перед началом умножения равен 0, и вводится счетчик (Сч).
Алгоритм умножения:
Пусть с = a*b и b = {bn, bn-1,…., b1}, где bi – i-ая тетрада делителя.
-
Определение знака результата: zn(a)+zn(b) mod 2 = zn(c).
-
i = 1, Сч := bi , Ac := 0
-
Произвести сложение по правилам д/д кодирования:
Ас := Ac + (множимое в избыточном коде);
После сложения: если из тетрады не было переноса, то отнимаем из нее 6 (c блок. переноса из тетрады в тетраду)
-
Сч := Cч – 1
-
Если (Сч != 0), то перейти к п.2; иначе:
-
Сдвинуть Ac вправо на 1 тетраду;
-
i = i +1 , Если ( i > n ), то конец; иначе - Сч := bi и перейти к п.2
Пример: (37)10 * (12)10 = (444)10 .
Операнды: (12)10 = (0001 0010)DD ;
(37)10 = (0011 0111)DD = (1001 1101)избыт. код
0000 0000 - Ac = 0
+ 1001 1101
-------------
1001 1101
+ 1010 1010 - коррекция после сложения
-------------
0011 0111
+ 1001 1101
-------------
1101 0100
+ 1010 0000 - коррекция после сложения
------------
0111 0100
-------------------------
0000 0111 0100 - сдвиг на 1 тетраду вправо
+ 1001 1101
--------------------------
1010 0100 0100
+ 1010 0000 - коррекция после сложения
--------------------------
0100 0100 0100 - сдвиг на 1 тетраду вправо
--------------------------
0000 0100 0100 0100 = (444)10
Деление.
Деление сводится к вычитанию и аналогично умножению. Для получения с = a / b надо вычесть из a делитель b некоторое число раз (с).
Алгоритм деления (аналогично умножению):
Определение знака результата аналогично. Из делимого вычесть делитель, предварительно выровняв по старшей тетраде. Если результат >= 0, то к текущему значению частного прибавить 1. Если результат < 0, то восстановить предыдущий остаток, прибавив к промежуточному результату делитель, и восстановленный остаток сдвинуть влево на 1 тетраду. И переходим к формированию следующей цифры частного.
Пример (для понимания алгоритма без представления в д/д CC): (444)10 / (12)10 = (37)10 .
с = {c2 , c1} - частное
444
- 12
------------- c2 = 1
32
- 12
------------- c2 = c2 + 1 = 2
20
- 12
------------- c2 = c2 + 1 = 3
8
- 12
------------
-4 < 0
+ 12 - восстановление
------------
8
-----------
84 - сдвиг на 1 тетраду
- 12
------------ c1 = 1
72
- 12
------------ c1 = c1 + 1 = 2
60
- 12
------------ c1 = c1 + 1 = 3
48
- 12
------------ c1 = c1 + 1 = 4
36
- 12
------------ c1 = c1 + 1 = 5
24
- 12
------------ c1 = c1 + 1 = 6
12
- 12
------------ c1 = c1 + 1 = 7
0
………………………. Т.о. с = 37.
-
1Подготовила: Даша Д.
-
Литература: Лекции по “Организации ЭВМ” (от 05.05.04).
4
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.















