Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория автоматов / 2008-03-21-01-47-Елена- лекций по ТА.doc
Скачиваний:
61
Добавлен:
01.05.2014
Размер:
1.09 Mб
Скачать

Перевод целого двоичного числа в код д1

Как было отмечено в предыдущем разделе, результат перевода в этом случае будет представлять каждую десятичную цифру в виде четырехразрядного двоичного кода. Поскольку код Д1 имеет естественные веса разрядов, то получаемые при переводе тетрады будут кодами соответствующих десятичных цифр в коде Д1. Если требуется выполнить перевод двоичного целого числа в код Д2 или Д4, необходимо уточнить механизм коррекций в тетрадах в соответствии с допустимыми в рассматриваемом коде тетрадами. В качестве примера выполним обратных перевод полученного в предыдущем разделе двоичного числа в код Д1. Так же, как и в предыдущем случае, требуется оценить число необходимых десятичных разрядов. Число значимых двоичных разрядов равно 8, следовательно, требуемое число десятичных разрядов равно n=]log28[ =3.

Схема операционного автомата должна содержать следующие структурные элементы:

  • РгА[0-11] для записи тетрад кода Д1,

  • РгВ[0-7] для записи исходного двоичного числа,

  • КС1 – три комбинационные схемы для выполнения коррекций в тетрадах,

  • СТ служит для контроля числа подсуммированных разрядов двоичного числа.

КС1 выполняет коррекцию тетрад следующим образом: для кода Д1 коррекция «+3» выполняется в тетраде, если ее значение превышает 4. Это позволяет избежать при сдвигах РгА влево появления недопустимых тетрад.

В каждом такте производится подсуммирование старшего бита двоичного числа к коду десятичного числа. Цикл управляется значением счетчика СТ. Выход из цикла при СТ=0.

Пример перевода целого двоичного числа в код Д1 в таблице 3.

Таблица 16 Перевод целого двоичного числа в код Д1

РгА

РгВ

СТ

Комментарии

0000 0000 0000

10001001

8

РгА:=0, РгВ:= [B],

0000 0000 0001

0001001-

7

РгА[11]:= РгВ[0], РгВ:=L(1)РгВ,

0000 0000 001-

СТ=0? НЕТ

РгА[0-3]>4?НЕТ РгА[4-7]>4? НЕТ РгА[7-11]>4?НЕТ

Коррекции в тетрадах не требуются. РгА:=L(1)РгА,

0000 0000 0010

001001--

6

РгА[11]:= РгВ[0], РгВ:=L(1)РгВ,

0000 0000 010-

СТ=0? НЕТ

РгА[0-3]>4?НЕТ РгА[4-7]>4? НЕТ РгА[7-11]>4?НЕТ

Коррекции в тетрадах не требуются. РгА:=L(1)РгА,

0000 0000 0100

01001---

5

РгА[11]:= РгВ[0], РгВ:=L(1)РгВ,

0000 0000 100-

СТ=0? НЕТ

РгА[0-3]>4?НЕТ РгА[4-7]>4? НЕТ РгА[7-11]>4?НЕТ

Коррекции в тетрадах не требуются. РгА:=L(1)РгА,

0000 0000 1000

1001----

4

РгА[11]:= РгВ[0], РгВ:=L(1)РгВ,

0000 0000 1011

СТ=0? НЕТ

РгА[0-3]>4?НЕТ РгА[4-7]>4? НЕТ РгА[7-11]>4?ДА

Требуется коррекция в третьей тетраде.

Выполняем коррекцию +3.

0000 0001 011-

РгА:=L(1)РгА,

0000 0001 0111

001-----

3

РгА[11]:= РгВ[0], РгВ:=L(1)РгВ,

0000 0001 1010

СТ=0? НЕТ

РгА[0-3]>4?НЕТ РгА[4-7]>4? НЕТ РгА[7-11]>4?ДА

Требуется коррекция в третьей тетраде.

Выполняем коррекцию +3.

0000 0011 010-

РгА:=L(1)РгА,

0000 0011 0100

01------

2

РгА[11]:= РгВ[0], РгВ:=L(1)РгВ,

0000 0110 100-

РгВСТ=0? НЕТ

РгА[0-3]>4?НЕТ РгА[4-7]>4? НЕТ РгА[7-11]>4?НЕТ

Коррекции в тетрадах не требуются.

РгА:=L(1)РгА,

0000 0110 1000

1-------

1

РгА[11]:= РгВ[0], РгВ:=L(1)РгВ,

0000 1001 1011

СТ=0? НЕТ

РгА[0-3]>4?НЕТ РгА[4-7]>4? НЕТ РгА[7-11]>4?НЕТ

Коррекции во второй и третьей тетрадах +3

0001 0011 011-

РгА:=L(1)РгА,

0001 0011 0111

--------

0

РгА[11]:= РгВ[0], РгВ:=L(1)РгВ,

СТ=0? ДА

Выход из цикла. Коррекция тетрад не выполняется.

Ответ: данное двоичное число равно 13710.

Таким образом, алгоритм перевода целого двоичного числа в код Д1 работает до тех пор, пока не будут подсуммированы все разряды двоичного числа, начиная со старшего к десятичному числу. Так как подсуммирование всегда производится после сдвига, то подсуммирование означает просто замещение нуля, стоящего в младшем разряде РгА, на значение старшего разряда РгВ. Признак СТ=0 означает выход из цикла. При этом сдвиг РгА не производится и коррекция в тетрадах не выполняется.