35738-2 Основы трансляции
...docСодержание
Задача 1
-
Сложить два двоичных числа в обратном коде в формате с плавающей запятой в нормализованном виде. При необходимости произвести нормализацию: 0100110111*2-2 + 01000100 * 2-3
-
Сложить два числа в ДДК (8421) в дополнительном коде: -618510 + 291610
-
Умножить два числа в двоичном обратном коде: (-10/16)10 * (-5/16)10
-
Поделить два двоичных числа в двоичном дополнительном коде: (3/16)]10 : (-10/16)10 по алгоритму без восстановления остатка с результатом в дополнительном коде.
Решение
1. Сложить два двоичных числа в обратном коде в формате с плавающей запятой в нормализованном виде. При необходимости произвести нормализацию: 0100110111*2-2 + 01000100 * 2-3
Представим числа 0100110111*2-22 и 01000100 * 2-32 в обратном коде.
Обратный код для положительного числа совпадает с прямым кодом. Для отрицательного числа все цифры числа заменяются на противоположные (1 на 0, 0 на 1), а в знаковый разряд заносится единица.
Двоичное число 00100110111*2-2 имеет обратный код 0,00100110111*2-2
Двоичное число 001000100 * 2-3 имеет обратный код 0,001000100 * 2-3
Сложим числа 000100110111*2-2 и 0001000100 * 2-3
В 8-ом разряде возникло переполнение (1 + 1 = 10). Поэтому записываем 0, а 1 переносим на 9-й разряд.
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
2 |
0 |
2 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
2 |
0 |
3 |
|
|
|
|
|
|
|
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
В 9-ом разряде возникло переполнение (1 + 1 = 10). Поэтому записываем 0, а 1 переносим на 10-й разряд.
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
|
|
|
1 |
1 |
|
|
|
|
|
|
|
|
|
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
2 |
0 |
2 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
2 |
0 |
3 |
|
|
|
|
|
|
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
В 12-ом разряде возникло переполнение (1 + 1 = 10). Поэтому записываем 0, а 1 переносим на 13-й разряд.
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
1 |
|
|
1 |
1 |
|
|
|
|
|
|
|
|
|
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
2 |
0 |
2 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
2 |
0 |
3 |
|
|
|
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
В итоге получаем:
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
1 |
|
|
1 |
1 |
|
|
|
|
|
|
|
|
|
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
2 |
0 |
2 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
2 |
0 |
3 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
Результат сложения: 0010010001110000
Получили число 0010010001110000. В десятичном представлении это число имеет вид:
Для перевода необходимо умножить разряд числа на соответствующую ему степень разряда.
0010010001110000 = 215*0 + 214*0 + 213*1 + 212*0 + 211*0 + 210*1 + 29*0 + 28*0 + 27*0 + 26*1 + 25*1 + 24*1 + 23*0 + 22*0 + 21*0 + 20*0 = 0 + 0 + 8192 + 0 + 0 + 1024 + 0 + 0 + 0 + 64 + 32 + 16 + 0 + 0 + 0 + 0 = 9328
Результат сложения (в десятичном представлении): 9328
Ответ: 001001000111000 или 9328.
2. Сложить два числа в ДДК (8421) в дополнительном коде: -618510 + 291610
6185 =0. 0110 0001 1000 1001 – прямой код (ПК) ~ обратный код (ОК).
-2916 = 1. 0010 1001 0001 0110 – ПК.
Перевод в обратный код: 0010 1001 0001 0110 + 0110 0110 0110 0110 =1000 1111 0111 1100 инверсия, 0111 0000 1000 0011 – ОК.
Сложение:
0. 0110 0001 1000 1001 + 0111 0000 1000 0011 = 1101 0010 0000 1100 был перенос и запрещена комбинация значит корректируем 0110 0110 0110.
10. 0011 0010 0111 0010 потом циклический перенос 0. 0011 0010 0111 0011 - результат в ОК.
Перевод в прямой код – 3273.
Ответ: 3273.
3. Умножить два числа в двоичном обратном коде: (-10/16)10 * (-5/16)10
C=A*B
Переведем в дополнительный код:
A=10/16 = 0.1010 п.к. = 0,1010 д.к множимое;
В= -5/16 = 1,0101 п.к = 1,1011 д.к. множитель.
0.1010.
1011.
b4=1 0 0000 1010
b3=1 0 0001 0100
b2=0 0 0000 0000
b1=1 0 0101 0000
0.0110 1110 Псевдопроизведение
1,0110 0000 Коррекция [-[A]дк]ДК
1.11001110 Результат в [C]ДК
Ответ: [C]п.к.=1.00110010 = -50/256
4. Поделить два двоичных числа в двоичном дополнительном коде: (3/16)10 : (-10/16)10 по алгоритму без восстановления остатка с результатом в дополнительном коде.
Представим число 3/16 в двоичном коде = 3 = 112
Обратный код для положительного числа совпадает с прямым кодом. Для отрицательного числа все цифры числа заменяются на противоположные (1 на 0, 0 на 1), а в знаковый разряд заносится единица. Двоичное число 0000011 имеет обратный код 0,0000011
Дополнительный код положительного числа совпадает с прямым кодом. Для отрицательного числа дополнительный код образуется путем получения обратного кода и добавлением к младшему разряду единицы.
Число 3/16 представляется в двоичном дополнительном коде как 0,0000011.
Представим число -10/16 в двоичном коде.
10 = 10102
Обратный код для положительного числа совпадает с прямым кодом. Для отрицательного числа все цифры числа заменяются на противоположные (1 на 0, 0 на 1), а в знаковый разряд заносится единица.
Двоичное число 0001010 имеет обратный код 1,1110101
Дополнительный код положительного числа совпадает с прямым кодом. Для отрицательного числа дополнительный код образуется путем получения обратного кода и добавлением к младшему разряду единицы.
В 0-ом разряде возникло переполнение (1 + 1 = 10). Поэтому записываем 0, а 1 переносим на 1-й разряд.
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
|
|
|
|
1 |
|
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
|
|
|
|
|
|
|
0 |
В итоге получаем:
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
|
|
|
|
1 |
|
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
Число -10/16 представляется в двоичном дополнительном коде как 1,1110110
Поделить два двоичных числа в двоичном дополнительном коде: 0,0000011: 1,1110110 = 1,0011011.
Задача 2
Синтезировать функциональную схему управляющего автомата Мили с жесткой логикой на RS -триггерах.
Таблица переходов
|
a1 |
a2 |
a3 |
a4 |
z1 |
a3 |
a1 |
a2 |
a3 |
z2 |
a4 |
a1 |
a4 |
a2 |
Таблица выходов
|
a1 |
a2 |
a3 |
a4 |
z1 |
W1 |
W1 |
W3 |
W2 |
z2 |
W2 |
W2 |
W3 |
W3 |
Решение
Кодирование состояний для модели Мили на RS-триггерах
Для кодировки состояний автомата на RS-триггерах воспользуемся эвристическим алгоритмом кодирования, который минимизирует суммарное число изменений элементов памяти на всех переходах автомата.
0 0 1). Кодируем первые два состояния : К(0) = 0000
0 1 К(1) = 0001
1 9 2) Выбираем следующее незакодированное состояние u = 9
1 2 1 9
2 3 3 9
3 4 M’= 8 9
3 9 9 0
4 5 9 9
M= 5 0 Составляем список уже закодированных соседних состояний
5 6 B = {1,0}
6 7 Список соседних кодов для них
7 6 C(0) = {1000,0100,0010}
7 8 C(1) = {1001,0101,0011}
8 9 D= {1001,0101,0011}
9 0 Выбираем код с минимальной функцией W
9 9 W(1000) = W(0100) = W(0010) =W(1001) = W(0101) = W(0011) = 3; K(9) = 0010
3) u = 2
M’= 1 2
2 3
B = {1}, D = {1001, 0101, 0011} K (2) = 0011
4) u = 3
2 3
M’= 3 4
3 9
B = {2; 9} C(2) = {0111, 1011}
C(9) = {0110,1010}
D = {0111,0110,1011,1010} K(3) = 0110
5) u = 4
M’= 3 4
4 5
B = {3} D = {0100,0111,1110} K(4) = 0100
6) u =5
4 5
M’= 5 0
5 6
B = {4,0}
C(0) = {1000}
C(4) = {1100, 0101}
D = {1000, 1100, 0101} K (5) = 1000
7) u=6
5 6
M’= 6 7
7 6
B={5} D={1100,1010,1001} K(6)=1100
8) u=7
6 7
M’= 7 6
7 8
B = {6} D = {1101,1110} K(7) = 1101
9) u = 8
M’= 7 8
8 9
B= {7,9}
C(7) = {1001,0101,1111}
C(9) = {1010}
D = {1001,0101,1111,1010} K(8) = 1010
Таблица 1
Прямая структурная таблица переходов и выходов автомата Мили при кодировке на RS-триггерах
Исходное состояние am |
Код am |
Состояние перехода as |
Код as |
Входной сигнал |
Выходной сигнал |
Функции возбуждения |
a0 |
0000 |
a0 a1 |
0000 0001 |
~x1 x1 |
- у0, y1 |
- S4 |
a1 |
0001 |
a2 a2 a9 |
0011 0011 0010 |
~x2x1x3 ~x2x1~x3 x2 |
y2, y3 - - |
S3 S3 S3, R4 |
a2 |
0011 |
a3 a3 |
0110 0110 |
x4 ~x4 |
y1, y4, y5, y6 y1, y6 |
R4,S2 R4,S2 |
a3 |
0110 |
a4 a4 a9 |
0100 0100 0010 |
~x2x5 ~x2~x5 x2 |
y2, y3 - - |
R3 R3 R2 |
a4 |
0100 |
a5 a5 |
1000 1000 |
x4 ~x4 |
y4, y5, y6, y7 y6, y7 |
R2,S1 R2,S1 |
a5 |
1000 |
a0 a6 a6 |
0000 1100 1100 |
x6 ~x6x7 ~x6~x7 |
y10 y3 - |
R1 S2 S2 |
a6 |
1100 |
a7 |
1101 |
1 |
y8 |
S4 |
a7 |
1101 |
a6 a6 a8 a8 |
1100 1100 1010 1010 |
~x8x7 ~x8~x7 x8x9 x8~x9 |
y3 - - y9 |
R4 R4 R2,S3,R4 R2,S3,R4 |
a8 |
1010 |
a9 a9 |
0010 0010 |
x10 ~x10 |
y5, y6,y11 - |
R1 R1 |
a9 |
0010 |
a0 a9 |
0000 0010 |
x11 ~x11 |
y12 - |
R3 - |