Основы информатики_Савельев А.Я_Учебник_2001
.pdf7 / Предспшоление десятичныл чисел в Д-коба*^
Для однозначности перевода чисел в Д-код и обратно желательно, что бы разряды геград имели определенный вес. Тогда значение десЯ1ичной
цифры а, coornciCiпуст выражению
|
|
|
с/, - aja.j |
4 н,,ст_-1 ! i.Xjfj2 |
+ а | а | , |
|
(7-3) |
|||
[ дс о, |
— вес разряда тетрады. |
|
|
|
|
|
|
|
||
В |
Ta6juiiic7.l представлено кодирование десятичных цифр |
в различ |
||||||||
ных Д-кода\. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 а сл о м а 7.1 |
|
|
|
|
|
Э к в и в а л с т ы |
в кодах |
|
|
|||
Д с с я т и ' т ы с |
Л, |
Д : |
Д; |
|
Д . |
|
д. |
д<, |
д, |
|
|
|
(1ЛК-Н-МП |
( f i i c i c M a |
(cHcieMa |
( с н о е м а |
(сиии'ма |
( с т л с м а |
(ciicieMa |
||
|
|
8421) |
2'1Л) |
SI21) |
«421 М) |
53-21) |
75-31) |
-Vt21) |
||
|
(1 |
«1100 |
0000 |
0000 |
ООП |
|
0000 |
0000 |
0000 |
|
|
1 |
11001 |
0001 |
0001 |
|
0100 |
|
0001 |
0001 |
0001 |
|
2 |
0010 |
0010 |
00 10 |
0101 |
|
от |
оно |
0010 |
|
|
3 |
001 1 |
001 1 |
ООП |
|
ОНО |
|
1010 |
0111 |
001 1 |
|
-1 |
0100 |
0100 |
от |
|
0111 |
|
0101 |
1010 |
0100 |
|
1,^ |
0101 |
1011 |
1000 |
1000 |
|
1000 |
0100 |
1000 |
|
|
оно |
1100 |
1001 |
1001 |
|
1001 |
0101 |
1001 |
||
|
1'« |
0111 |
1101 |
1010 |
1010 |
|
1111 |
1000 |
1010 |
|
|
1000 |
11 10 |
101 |
1 |
1011 |
|
1100 |
1001 |
1011 |
|
|
|
|
||||||||
|
|
1001 |
1111 |
1111 |
1100 |
|
1101 |
1110 |
1100 |
|
И |
изблице для каждого Д-кода указаны разрешенные комбинации. Все |
|||||||||
лру| ие комбинации - |
запрещенные. |
|
|
|
|
|
|
|||
Наличие |
разрешенных и запрен1ен[1ых комбинаций |
— очень важное |
cBoifcrBo Д-кодов. Оно отличает их от обычных позиционных систем счис ления, в 1согорых все комбинации — разреп1еннь[е.
PaccMoi рим н;1и6о.11ее расмрос граненные Д-коды.
Код Д| прямого замещения (система 8421). В коде Д, разрешенные комбинации соответствуют двоичным эквивалентам десятичных цифр с весами разрядо!!. равнь1Х степеням основания 2. Для эгого кода не BbrnojniHсгся усЛ()[и1С (7.2), так как цифры, являюпщеся доио:п1е)1ием до 9, ие получаютс.ч простым инвертированием наборов тетрад.
Код |
Д^ (система 2421). Для кода Д ; веса разрядов |
тетрады соотвез- |
сгвенмо |
равны 2, 4, 2, ] ; таблица кодирования делится на две части: от О |
|
до 1 — тетрады повторяюг двоичные эквиваленты; от 5 |
до 9 — по сравне- |
161
7. Выполнение операций над десятичными числами в цифровых автоматах
нию С двоичной системой каждая тетрада содержит избыток +0110. Это дает возможность лк^ую цифру одной части таблицы превратить в ее до полнение до 9 простым инвертированием. •
Код Д^ (система 8421+3). Для этого кода все тетрады имеют значения на три единицы больше, чем тетрады кода Д, (отсюда название кода), и для него не существует целочисленных значений веса, которые удовлетво ряли бы (7.3).
Коды Д; (система 53-21) и Д^ (система 75-31). Эти коды отличаются от вышеназванных кодов тем, что для них некоторые веса имеют отрица тельное значение.
В вычислительных машинах разного назначения чаще всего исгюльзуются коды Д, и Д4.
7.2. Формальные правила поразрядного сложения в Д-кодах
Для определения формальных правил поразрядного сложения чисел, представленных в Д-коде, рассмотрим те особенности, которые присущи этим кодам.
1, Наличие разрешенных и запрещенных комбинаций.
Появление запрещенной комбинации при выполнении каких-то дейст вий над числами свидетельствует о возникновении ошибки или же о необ ходимости ввести корректировку результата.
2. При сложении тетрад возникает потетрадный перенос п| - 1 6 вме сто поразрядного переноса п, = 10 . Это приводит к необходимости коррек ции результата.
В самом деле, если складываются |
числа |
А^ = а^,а^_^ ...а^а^^ и |
^л - КК~\ • • • ^1^0' то сумма С^= А^+В^ и |
|
|
С, =а, +Ь, + п,^| - |
n^q , |
(7.4) |
где С, — /-Й разряд суммы; п,^, — перенос из младшей тетрады; п, — пе ренос в старшую тетраду (п,_, = {0,1}, п^ = [0,1], ^ = 10).
Далее выведем правила сложения применительно к Д-кодам.
При сложении чисел в коде Д, могут возникнуть следующие случаи. 1. Пусть (7, +h, +п,,| <10, где а^,Ь, —тетрады кода Д, . При сложении
в данном разряде числа образуется сумма меньше 10. Если действия над
162
7 2 Формальные правила поразрядного сложения в Д-кодах
разрядами тетрады проводят по правилам двоичной арифметики, то пра вильный результат получают без коррекции.
Пример 7.1. Сложить тетрады а, =0100 и й,=0101 при значении п,_,=0. Р е ш е н и е с, =а, +Ь, 4^п,_, = 1001.
Ответ с, = 1001.
2. Пусть а, + h, + п,_, > 10, т. е. возникает десятичный перенос и сумма должна быть равна а, + й, + п,^| - п, 10 , где п, = 1.
Свидетельством того, что результат неправильный, является либо по явление запрещенной комбинации, если 15 > д, +6^ + п,_, к 10 , либо появле ние потетрадного переноса п] =\6, что превышает значение десятичного переноса на 6. Следовательно, требуется коррекция результата в данной
тетраде введением поправки, равной |
+0110. |
|
Пример 7.2. Сложить геграды а, =0101 |
к Ь, = 1001 при значении п,_, = 1 , |
|
Р е ш е н и е с'^ - а, |
+6, -f-n,., =1111. |
|
Величина с, = 11 М |
- занретеннан комбинация. Следовательно, надо ввести поправку; |
|
|
|
1111 |
|
|
*0110 |
(1)= 0101,
т.е. резулыа! рапси 0101 в дайной тетрале и образован перенос в старшую тетраду. Ответ с, =0101,н, =1 .
Пример 7.3. Сложить тефадь! а, = 0111, й, = 1001 при значении п,_| = 1 . Р е !л е и и е . с,' = «, + ft, 4^ п,_| = (1)0001.
п', Появление иогегршншго переноса требует коррекции результата: с, =0001 +
+0110 = 0111.
Ответ с, = 0111, р, = I.
Примеры, рассмотренные выше, дают возможность сформулировать следующие правила потетрадного сложения чисел в Д, -коде:
если при потетрадном сложении перенос в соседнюю старшую тетраду не возникнет {п, =0), то результат суммирования не требует коррекции;
коррекция результата потетрадного сложения путем добавления по правки + О! 10 требуется в случае, если:
а) возникает |
потетрадный |
перенос в старшую тетраду (п, = 1); |
б) возникает |
запрещенная |
комбинация. |
163
7. Выполнение операций над десяти |
числами в цифровых автоматах |
Устройство, которое работает по сформулированным выше правилам, называется одноразрядным десятичным сумматором для Д-кода (рис. 7.1).
Рнс. 7.Г Cipyicrypiiafl схема одноразрядною десятичного сумматора ддя Д[-кода
Рассмотрим пример суммирования целых чисел.
Пример 7.4. Сложить числа /( = 279 = 001001111001 и В = 581 =010110000001 , запи санные в коде Д(.
Р е ш е н и е . Прежде всего проводится потетрадное суммирование, а за1ем коррекция там, где это необходимо:
А= |
0010 |
0111 |
1001 |
fl= |
* 0101 |
1000 |
0001 |
|
|
n i l |
1010 |
с - |
|
Olio |
оно |
1000<-0110<-0000 |
Здесь стрелка указывает передачу единицы десятичного переноса. Отчет: Г = 860 = 1000 0110 ООООд,.
При сложении чисел в коде Дз могут возникнуть следующие случаи. 1. Пусть а,' < 5 и 6,' < 5 , где а', Ь', — тетрады для кода Д2. Тогда: если а', + h' + п,., < 5 , то результат сложения не требует коррекции;
если а' +Ь' + п,^, > 5 , то результат попадает во вторую часть таблицы кодирования, где с,' = с, + 6 .
Здесь необходима коррекция результата введения поправки ОНО. При знак этого — появление запрещенных комбинаций.
164
7 2 Формальные правила поразрядного слолсемия в Д-кодах
2. Пусть а]>Ъ И *,' < 5; 15 > а,' + *,' + п,^, > 5 .
Так как а' = а, + 6, при суммировании поправка не требуется. 3. Пусть U,' г 5 и *' > 5; п, = 1. Тогда:
если 10 < а,' + й,' + п,_| < 15 , то результат требует коррекции путем вве дения поправки -ОНО, так как появляется запрещенная комбинация';
если же а[ + Ь] + п,_| < 15 , то результат не требует коррекции.
При потетрадном суммировании в Дз -коде результат суммирования без коррекции получается во всех случаях, кроме следующих:
если при огсутствии переноса в старшую тетраду (п, = 1) возникает за прещенная комбинация, то требуется ввести поправку +0110;
если при наличии переноса в старшую тетраду (п, = 1) возникает за прещенная комбинация, то требуется ввести поправку -ОНО (1001 в об ратом коде или 1010 в дополнительном коде).
Гак как поправки бывают положительные или отрицательные, их вве дение сопровождается блокировкой цепей межтетрадного переноса в пери од коррекции результата.
Пример |
7.5. Сложип, числа |
/(=001001001110 |
и 8 |
= 000111001111, записанные в |
|||
КО;ЕС / Ь |
|
|
|
|
|
|
|
1'еи1С!!ис |
Сначала проводится |
сютетрадиое суммирование, а затем ocyiiieciвляетсн |
|||||
коррекции |
|
|
|
|
|
|
|
|
|
А= |
0010 |
0100 |
1110 |
|
|
|
|
fl= |
* |
0001 |
1100 |
1111 |
|
|
|
|
|
0100»-0001<-1101 |
|
||
l'ejyjn.ia[ |
получился без коррекции, |
|
|
|
|
||
Отжт (•„ |
=0|000001110|д^ |
|
|
|
|
|
Пример 7.6. Сложить числа /( = 137 = 000100111101 и S = 457 = 010010111101, запи санные н коле 1\2
I* с HI с и и с - Сначала 11ро|Шли1ся гсогетрадное суммирование, а затем коррекгшя:
/(= |
0001 |
ООП |
1101 |
й= |
0100* |
1011 |
1101 |
,0101 1111 1010 ОНО * 0000* 1010
1011 1111 0100
Исключение из этого случая возникает при а, +й, +П,., =15, когда не требуегся вводн1ь поправку, так как появится разрешенная комбинация.
165
7Выполнение операций над десятичными числами в цифровых автоматах
Вмладшей тетраде возникает перенос п, = I и запрещенная комбинация — вводится поправка 1010 в дополнительном коде; в старшей тетраде при п, = 0 возникла запрешеиная комбинация — поправка вводится 0110.
Ответ С = 594 = 1011 | Щ 0100д^ ,
При сложении чисел в коде Д4 возможны следующие случаи.
Пусть а'/= «, + 3, й,"= Ь, + 3, где а' |
и Ь" — тетрады для кода Дд . Тогда: |
если а" + Ь^+ п,_, < 10 , то с' = а, |
+ 3 + й, + 3 + ti,_| = а, +b, + п,_, + 3 + 3 ; |
результат требует коррекции путем введения поправки - 0011; если а" + Ь", + n,^j > 10, то с" = а, +Ь, + п,_^, + 3 + 3 .
Здесь возникает десятичный перенос, который, по условию, «уносит» с собой шесть избыючных комбинаций. Следовательно, в данном случае требуется коррекция результата путем введения поправки -^ ООП .
Пример 7.7. Сложить числа ^ --- 35 - 01101000 и В = 28 ^ 0101 1011 . заммсампыс в
коле Дд Р е ш е н и е , Сначала проводится потетрадное сложение, а затем введение поправок-
А= |
ОНО |
1000 |
й= * |
0101 |
1011 |
|
1100 «-ООП |
|
|
ООП + ООП поправки |
|
Г = |
1001 |
ОПО |
Ответ Г = 63 = I0010П0„^,
Здесь поправки вводятся при блокировке цепей по1е1радного переноса. Правила введения поправок можно сформулировать так; если при сложении тетрад не возникает переноса (п, = 0 ) , то поправка
равна - О О П (или дополнение + 1101); если же возникает потетрадный пе ренос (п, = 1), то поправка равна + 0011.
Аналогичным образом можно рассмотреть правила суммирования для других Д-кодов.
7.3. Представление отрицательных чисел в Д-кодах
Представление Д-кода в разрядной сетке машины может осуществляться в форме либо с фиксированной, либо с плавающей запятой. При этом отри цательные числа должны представляться в прямом, обратном или дополни тельном кодах. Поэтому, если Л = -О, a^a2 •• - «„, где Й, — тетрады, то
166
'' 3 Представление отрицательных чисел в Д-кодах
[А]^=\,а^а^..Л„\ |
(7.5) |
где а, — дополнение до ly - 1 во всех тетрадах; а, — дополнение до ly - 1 во всех тетрадах, за исключением младшей, для которой это дополнение т q = \0 ,
Из правил преобразования (7.5) следует, что
а, + a,=q-\. |
(7.6) |
Это означает, что для Д-кодов, для которых выполняется условие (7.2), обратный код получается простым инвертированием набора тетрад.
Пример 7.8. Иайги обратный и дополнительный коды в коде Д, для числа
А= -0,127 = -0,0001 0010 1101д^ .
Ре ш е н и е . Иа основании (7.5) \Л]^ = 1.1110 1101 0010.
Исиольчуя соогмотение \МФ-^п" ~\Мл- находим дополнительный код: \Л\^ =1.1110 11010011.
Прибавление елипииы в младшую тетраду при образовании дополнительного кода в ко
ле Д; осуществляемся но ггравилам сложения для этого кода. |
|
|||
Ответ jJ),,- |
- 1.1110 1101 ООЮд,: [А\^ = 1.11 10 1101 0011д^ |
|
||
Пример 7.9. |
11ай|и обратный и дополнительный |
коды в коде |
Д4 для числа |
|
/f = -0.45Ч| .0.0111 1000! ЮООЮОд^ . |
|
|
|
|
Ре Ml е ii и е |
На основании (7.5) |
|
|
|
|
[^1„б =1,1000 |
0111 ООП |
1011; |
|
|
[^]„ =1,1000 |
0111 ООП 1100. |
*^' |
Прибавление единицы в младшую тетраду при образовании дополнительного кода в ко де Д4 не ipeOyei коррекции.
Ответ см формулу (а) даиното ггримера.
Код Д, о1личается тем, чтх) для него не выполняется условие (7.2). Эта особенность кода влияет на образование обратного или дополнительного ко да, так как инвертирование набора тетрад означает получение дополнения до 2 - 1 = 1 5 . Следовательно, необходимо убрать разницу. Один из используе мых при эюм приемов состоит в том, что во все цифровые тетрады числа в коде Д| добавляется 4-ОПО и после этого проводится инвертирование набо ра. Полученное изображение представляет сс^ой обратный код числа.
Пример 7.10. Получить обратный код в коде Д, для числа Л = -0,256 = -4).0010 010101HV
167
''.Выполнение операций над десятичными числами в цифровых автоматах
Ре ш е н и е . Сначала во все тетрады добавляется 0110;
0.0010 0101 ОНО
+4 - 4 -
0110 оно оно
0,1000 1011 1100 После инвертирования этого набора получаем [А]^ = 1,0111 0100 0011д . Ответ [А]^ = 1.0111 0100 0011д^ ,
7.4.Выполнение операций сложения и вычитания чисел
вД-кодах
Все арифметические действия в Д-кодах выполняются над операндами по формальным правилам десятичной арифметики, сформулированным выше.
Возникающие при этом специфические особенности целесообразнее рассмотреть на конкретных примерах.
Пример 7.П. Сложить |
в коде Д, на сумматоре дополинтельиого кода числа |
^ = Ч).100000100101 и 5 = |
0,100101000110. |
Р е ш е н и е . Исходные числа представляются в дополнительном коде и их изображения
складываются: |
|
|
|
|
|/1), = |
1. |
0001 |
U I I I |
0101 |
т, = * 0. |
1001 |
0100 |
ОНО |
|
, |
1. |
1010 |
1011 |
Ч)]1 |
|
|
ОНО |
ОНО |
ОНО поправки |
|С), = |
0,«-0001«-0010«-0001. |
|||
Ответ: Г = 0,0001 0010 0001д . |
|
|
||
Пример 7.12. Сложить |
в |
коле |
Д[ на |
сумматоре обратного кола числа |
/( =-0,0100 1000 01 Н и fl =-0,0010 ООП ОНО.
Р е ш е ir и е . Исходные числа представляются в обратном коде и их изображения скла
дываются: |
|
|
|
[А]^ = |
I, |
0101 |
0001 0010 |
[Slot = |
I, ^ 0111 |
ОНО ООН |
|
|
^ О, |
НОО |
01П ОНО |
|
|
ОНО |
0000 0000 поправки |
|С]^ = |
1,«-0010 |
ОТП ОНО, |
При коррекции в коде Д, цепи межтетрадного переноса в сумматорах неблокируюк Ответ гголучаем ггосле преобразования результата из обратного кода.
Ответ. Г =-О.ОН! 00100011д .
7.4 Выполнение операций сложения и вычитания чисел в Д-кодах
Пример 7ЛЗ. Сложить в коле Д; на сумматоре дополнительного кола числа /(=-0,0000110100111011 и Я = -0,0000111100101011.
Р е ш е н и е . Если все делать по правилам, то [Л\^ = 1,1111 001011000101, В последней
тетраде получена запрещенная |
комбинация, что свидетельствует о необходимости |
коррек |
||||
ции путем введения поправки 0110: |
|
|
|
|
||
|
|
|
0101 |
|
|
|
|
|
|
•^0110 |
|
|
|
|
|
|
1011. |
|
|
|
Аналогично для вгорого числа получаем в последней тетраде 1011. Следовательно, |
||||||
|/(1. = |
1. |
1111 |
0010 |
1100 |
1011 |
|
[В],=* |
1. |
1111 |
0000 |
1101 |
1011 |
|
|
1.«г 1110«-0011«-1010«-0||0 |
|
||||
|
|
0000 * 0000 |
1010 "^ЮЮ поправки |
|
||
| Г | . = |
I, |
1110 |
ООП |
0100 |
ОООО |
|
Проводится обратное преобразование дополнительного кода. |
|
|||||
Ответ С = -0,0001 1100 1 ЮОООООд^ . |
|
|
|
|||
Пример 7.14. Сложить |
на сумматоре |
обратного кода (система Дг) |
числа |
/( =0.1110101100Пд, и А = -0,|1000100101|д^.
Р е ш е н и е . Сначала числа записываем в обратном коде и их изображения складываем:
(•4)об', |
I. |
ООП |
10П |
0100 |
| f l U = |
U, |
П10 |
10П |
ООП |
|
0,«-0010«- 0П0*^1000 |
|||
* |
|
0000 |
* 1010 "^0110 поправки |
|
(С]„5 = |
О, |
0010 |
0000 |
т о . |
Ответ \С\^ = 0,0010 0000 111 Од^ . |
|
|
||
Пример 7.15. Сложить |
в |
коде |
Д4 на |
сумматоре обратного кода числа |
/( =-0,1011И0001II1001 и fl = 0,00nlOOOIOOIIOIO.
Р е ш е н и е , Сначала записываем в обратном коде и затем складываем изображения:
(/(U, = |
I, |
0100 |
ООП |
1000 |
ОНО |
|Я1об = |
"• |
W 4 |
100° |
4)°' |
'ДЮ |
|
1, |
0111 |
1100 |
<х 0010 <-0000 |
|
|
|
П01 |
НОГ "^0011 |
"^ООИ поправки |
|
[Ги= |
I, |
0100 |
1001 |
0100 |
ООП. |
При введении поправок цепи межтетрадного переноса блокируктгся и отрицательные поправки вносятся в виде дополнения (! 101).
Ответ Г = -01011 ОНО ЮН 1 ЮОд^ .
Рассмотренные выше примеры выполнения операций сложения в Д- кодах позволяют сделать ряд общих замечаннй; коррекция результата может
169
7 Выполнение операций над десятичными числами в цифровых автоматах
осуществляться автоматически либо программным путем, либо с помощью аппаратных средств. Первый метод потребует разработки специального бло ка управления, а второй — усложнения схемы собственно сумматора. Эчу задачу разработчик решает в конкретной постановке в зависимости от требо ваний. На практике чаще используется схемный метод коррекции.
По изложенным выше правилам реализуются алгоритмы сложения (вычитания) чисел, представленных в форме с фиксированной запятой на специальных десятичных сумматорах.
Для десятичных чисел с плавающей запятой используют ту же мегодику, что и для двоичных чисел; порядки чисел перед сложением выравнива ются (меньшему числу присваивается порядок большего числа) и по окон чании операции проводится нормализация результата. При этом со стороны младших разрядов отводится дополнительная тетрада, используемая при сдвигах вправо.
7.5. Умножение чисел в Д-кодах
Выполнение операций умножения в Д-кодах при[щипиально проводит ся по классической схеме:
умножение чисел сводится к последовательному суммированию част ных произведений, гюлучепиых при умножении множимого па очередную цифру множителя. Так как каждая цифра множителя представляется в виде (р4рзр2р|)<' ^•^^ ^ — номер разряда, умножение сопровождается расшифров кой значения очередной тетрады множителя и сдвигом на чегыре разряда сразу. Расшифровку можно осуществить разными способами. Простейшим приемом является последовательное вычитание единицы из значения тетра ды до получения нуля и соответственно прибавление множимого в сумматор на каждом такте. При умножении на сумматоре прямого кода надо преду смотреть дополнительную тетраду на случай мес1чюго переполнения.
Пример 7,!6. Умножить на сумматоре прямого кода (код Д 2 ) числа [^]„р = ! , 0 O i m O ! ;
[S],p =0.00100100.
Р е ш е н и е . При умножении используются сумматор прямого кода для кода Д , на три тетрады и регистры на две тетрады,
Последовательность выполнения операции показана в таблице 7.2.
При умножении в коде Д , анализ тетрад можно осуществлять с помошью реверсивного счетчика.
Ответ: [/^В1„р = 1,0000111011101110,
170