В цифровой ЭВМ любая информация (числовая, символьная, команда, операции и т.д.) представлена в двоичном коде, т.е. в виде комбинаций 0 и 1. Для того, чтобы машина могла отличать один вид информации от другого, ее обычно размешают и хранят в разных регистрах. Так, например, коды команд обязательно хранятся в регистре команд, данные - в регистре данных и т.д. Если команда будет записана в регистр данных, то она будет прочитана машиной как число, а число, записанное в регистр команд, будет воспринято как команда. Кроме того, машина должна различать положительные числа и отрицательные, целые и дробные, что необходимо при выполнении арифметических и логических операций.
В данной работе рассматриваются принципы выполнения в ЭВМ арифметических операций сложения и вычитания. Их схемотехническая реализация зависит, во-первых, он формы представления двоичных чисел, во-вторых, от типа используемых кодов. В вычислительной технике используются две формы представления двоичных чисел: с фиксированной запятой (точкой) - естественная форма, и с плавающей запятой (точкой) - полулогарифмическая или нормальная форма. Рассмотрим первую форму, используемую в данной работе.
Для кодирования чисел в ЭВМ используется одно машинное слово, представляющее собой совокупность двоичных разрядов, называемое разрядной сеткой. В различных типах ЭВМ слова могут быть 2-байтовыми (16 разрядов), 4- байтовыми (32 разряда) и 8-байтовыми (64 разряда).
При любой форме представления двоичного числа (естественной или нормальной) под знак используется старший бит разрядной сетки числа. Если число положительное, то старший знаковый бит равен 0, если число отрицательное, то знаковый бит равен 1. Положение запятой (точки) строго фиксировано после определенного разряда и делит число на целую и дробную часть. Запятая может быть зафиксирована программистом в любом месте разрядной сетки, однако, чаще всего запятая фиксируется или перед первым (старшим) цифровым разрядом, или после младшего (крайнего правого) разряда. В первом случае в разрядной сетке можно изобразить правильные дроби и машина оперирует с числами меньшими единицы. Во втором случае в разрядной сетке будут изображаться целые числа. Следует понимать, что запятая подразумевается программистом и машиной никак не фиксируется. Позиция запятой имеет значение только для программиста, который при составлении программы должен ввести в машину масштабные коэффициенты и преобразовать обрабатываемые числа либо в правильные дроби, либо в целые числа. При получении окончательного результата все введенные коэффициенты масштабирования должна быть учтены.
Знак числа
…..
Знак числа
…..
Казалось бы, такие сложности не оправданы, и представление чисел с фиксированной запятой не может иметь распространение в практике. Однако, существует целый класс задач, так называемые "деловые", где заранее известен порядок чисел и результата, например, часто встречающиеся финансовые задачи, где подсчитываются деньги в копейках (или рублях) с точностью, например, до 0,01 коп, т.е. все числа не должны иметь больше 3 знаков после запятой. В этом случае можно ввести одинаковый коэффициент масштабирования для всех чисел и учесть его при получении результата. К такого типа задачам можно отнести и задачи по подсчету изделий, количество которых всегда выражается в целых числах и т.п.
Достоинством представления чисел с фиксированной запятой является естественность этого способа и, как следствие, все действия с числами выполняются по правилам обычной арифметики, что повышает быстродействие машин. К недостаткам следует отнести сравнительно узкий диапазон используемых чисел (этот недостаток преодолевается, если использовать способ представления чисел с плававшей запятой).
Все арифметические действия в ЭВМ могут быть сведены к сложению чисел и их сдвигам в разрядной сетке.
Операция вычитания в ЭВМ заменяется сложением специально построенных кодов чисел: обратного и дополнительного. Кроме обратного и дополнительного существует и прямой код, который используется для представления отрицательных чисел в цифровых устройствах, если другие коды не применяются. Рассмотрим правила построения этих кодов, переход от одного кода к другому на примере целых чисел. Сразу отметим, что изображение положительных чисел во всех кодах совпадает и старший бит (разряд) числа в любом коде отводится под знак.
Прямой код. Число X в прямом коде обозначается . Строится прямой код по следующему правилу:
если , то
если , то
где - двоичные цифры.
Пример: а) X = +10110101 = 010110101
б) X = -10110101 =110110101.
Следовательно, прямой код двоичного числа совпадает по изображению с записью данного числа, но в знаковом разряде ставится 0, если число положительное, и 1 - если число отрицательное.
Обратный код. Число X в обратном коде записывается как . Если X > 0, то . Обратный код отрицательного числа формируется по следующему правилу: в знаковый разряд числа записывается единица, а цифровые разряды инвертируются, т.е. единица замещаются нулями, а нули единицами.
Если , то
Пример: а) X = +01011011 =001011011
б) X = -01011011 =110100100.
Дополнительный код.Если X > 0, то . Для отрицательных чисел дополнительный код получают по следующему правилу: числа переводят в обратный код и в его младший разряд прибавляют единицу. Если , то
Пример: а) X = +010101 = 0010101,
б) X = -010101 = 1101010+0000001=1101011.
Сложение чисел в ЭВМ с учетом знакасостоит из следующих этапов:
1. Преобразование прямого кода исходных чисел в обратный или дополнительный код.
2. Поразрядное сложение кодов по правилам двоичной арифметики.
3. Преобразование полученного результата в прямой код при посылке в другие устройства машины.
Рассмотрим сложение чисел в ЭВМ с фиксированной запятой.
Сложение чисел в обратном коде. Обратные коды чисел суммируются поразрядно, причем знаковые разряды складываются также как разряды чисел. Если при сложении в знаковом разряде возникает единица переноса, она прибавляется к младшему разряду суммы (эта операция называется циклическим переносом).
Рассмотрим четыре возможных варианта.
1. Х>0, Y>0, X +Y >0.
В этом случае сложение выполняется в прямом коде, т.к. он совпадает с обратным.
2. Х>0, Y <0, X+Y <0.
Рассмотрим пример, в котором результат получим дважды: с помощью ручного счета, а затем выполним сложение так, как делает это машина в обратном коде (машинный счет). Ручной счет выполняется по правилам обычной арифметической логики.
Переведем результат в прямой код
Результат ручного и машинного счета совпадает. Здесь циклический перенос не возникает.
3. Х>0, Y <0, X+Y > 0.
Результат ручного и машинного счета совпадает. Здесь образуется циклический перенос: единица переноса, возникшая в знаковом разряде, прибавляется к младшему разряду суммы обратных кодов.
4. Х<0, Y <0, X+Y < 0
Результат, переведенный в прямой код, совпадает с ручным счетом:
Сложение чисел в дополнительном коде производится так же, как и в обратном, но единица переноса, возникающая в знаковом разряде, отбрасывается. В качестве примера рассмотрим сложение чисел в дополнительном коде.
1. X >0, Y < 0, X+Y < 0
Переход от дополнительного кода к двоичному числу выполняется по следующим правилам:
1) число, представленное в дополнительном коде, инвертируется;
2) к полученному результату прибавляется единица в младший разряд;
3) число, стоящее в знаковом разряде (0 или 1), определит знак результата.
Такой переход выполняется только для отрицательных чисел. Переведем результат в прямой код.
2. Х>0, Y <0, X+Y > 0.
3. X<0, Y<0, X+Y<0
Преобразуем полученный результат в прямой код:
Недостатком обратного и дополнительного кодов, имеющих один знаковый разряд, является то, что машина не всегда фиксирует переполнение разрядной сетки, если при неправильно подобранном масштабе результат выходит за границы разрядной сетки. Например:
В этом случае, несмотря на то, что результат сложения двух положительных чисел должен быть также положительным, машина воспримет результат как отрицательное число. Поэтому для обнаружения переполнения разрядной сетки был введен модифицированный обратный и дополнительный код, отличающийся от обычных обратного и дополнительного кода, наличием двух знаковых разрядов.
Число в модифицированном обратном коде записывается следующим образом:
а) положительное число →
б) отрицательное число →
Любая другая комбинация чисел в знаковых разрядах (01 или 10) будет означать переполнение разрядной сетки. Решим приведенный выше пример в модифицированном обратном коде:
В машине оба знаковых разряда сравниваются, и при появлении признака переполнения машина останавливается.
Число в модифицированном дополнительном коде записывается следующим образом:
а) положительные числа →
б) отрицательные числа →
Сложение чисел в модифицированном дополнительном коде происходит также как и в модифицированном обратном коде, но единица переноса, образующаяся при сложении знаковых разрядов, отбрасывается.
Пример: X = 110101, Y = -001110
Вычитание двоичных чисел в ЭВМ заменяется сложением с вычитаемым, взятым с обратным знаком.
Ввиду того, что сумматор К155ИМ3, используемый в работе, четырехразрядный, то при использовании его для суммирования чисел с учетом их знака в обратном и дополнительном кодах старший разряд сделаем знаковым, а в оставшиеся три разряда будем записывать слагаемые. Таким образом, при выполнении практических заданий вы будете оперировать с трехразрядными целыми двоичными числами. Заполните таблицу 3, переведя положительные и отрицательные числа от 0 до 7 в прямой, обратный и дополнительный коды.
Чтобы использовать сумматор для вычитания двоичных чисел в обратном коде, его необходимо дополнить инверторами, преобразующими вычитаемое число в обратный код и обеспечить суммирование единицы переноса, если она возникает в знаковом разряде с содержимым самого младшего разряда. Принципиальная схема такого 4х разрядного сумматора дана на рис.7.
Инверторы преобразуют вычитаемое в обратный код, а объединение выхода переноса SM4 ( ) со входом переноса SM1 ( ), так называемый циклический перенос, позволяет прибавить единицу переноса к самому младшему разряду.
Таблица 3
Десятичное
число
Двоичное
число
Прямой
код
Обратный
код
Дополнительный
код
+7
+6
+5
+4
+3
+2
+1
–1
–2
–3
–4
–5
–6
–7
Чтобы схему, изображенную на рис. 7 можно было использовать и для суммирования, необходимо исключить из нее 4 инвертора. Следовательно, в сумматоре-вычитателе должна быть цепь управления, которая разрешала бы переходить от суммирования к вычитанию и наоборот. Одна из таких функциональных схем сумматора-вычитателя показана на рис. 8. Вместо инверторов в ней использованы ЛЭ "исключающее ИЛИ". Если на один из входов ЛЭ "исключающее ИЛИ" подать нуль, то информационные сигналы, поступающие на вторые входы, не инвертируются, т.е. информационный сигнал на выходе "исключающего ИЛИ" совпадает с информационным сигналом на входе. Поэтому суммирование осуществляется при нулевом управляющем сигнале. Если управляющий сигнал будет 1, то "исключающие ИЛИ" инвертируют вычитаемое и в этом режиме схема работает как вычитатель, вычитая двоичное число из двоичного числа .
Рассмотрим схему сумматора-вычитателя, работающего в дополнительном коде (рис.9). Она отличается от схемы сумматора-вычитателя, работающего в обратном коде, во-первых, отсутствием циклического переноса, во-вторых, тем, что вход переноса CMP ( ) подключен к шине, задающей режим работы ("сложение" или "вычитание"). Режим сложения задается подачей на вход управляющей шины уровня логического 0. При этом сигнале поступают на входы сумматора-вычитателя без инвертирования, а на входе переноса сумматора СМР устанавливается нулевой уровень. Таким образом, сумматор-вычитатель работает как обычный сумматор, но перенос, образующийся на выходе сумматора ССР отбрасывается.
При выполнении операции вычитания на вход управляющей шины подается уровень логической 1. В этом случае ЛЭ "исключающее ИЛИ" инвертируют дополнительный код положительного числа вычитаемого, поступающего на входы В, преобразуя слагаемое в обратный код, а прибавление 1, появившейся на входе переноса сумматора СМР ( ) превращает обратный код в дополнительный код отрицательного числа. Затем происходит суммирование дополнительных кодов чисел А и В, результат выдается в дополнительном коде.
Контрольные вопросы
1. Составьте таблицу истинности для полусумматора, напишите логические уравнения для суммы и переноса, разработайте схему полусумматора, использовав при этом минимальное количество ЛЭ. Перечислите, какие ЛЭ вам потребуются.
2. Составьте таблицу истинности для полного сумматора, напишите логические уравнения для суммы и переноса, разработайте схему сумматора с применением минимального количества ЛЭ. Перечислите, какие ЛЭ вам потребуются.
3. Объясните принцип построения полувычислителя.
4. Объясните таблицу истинности полного вычетателя, запишите логические уравнения для разности и заема, минимизируйте их к виду (5,6) и покажите функциональную схему вычетателя.
5. Разработайте схему вычетателя, пользуясь логическими уравнениями (3) и (4).
6. Объясните принцип построения многоразрядного параллельного сумматора с последовательным переносом. Какая из изучаемых в данной работе ИМС сконструирована по этому принципу?
7. Почему быстродействием многоразрядных сумматоров с последовательным переносом определяется временем распространения сигала переноса в схеме?
8. Объясните, пользуясь схемами сумматора и вычитателя, как образуется сигнал суммы (разности) и переноса (заема).
9. Какие формы представления двоичных и двоично-десятичных чисел используются в цифровых ЭВМ?
10. Какие правила положены в основу образования прямого, обратного и дополнительного кодов?
11. Из каких операций состоит сложение чисел в ЭВМ с учетом их знака?
12. Приведите примеры суммирования двух чисел (с учетом их знака) в обратном коде, рассмотрев следующие четыре случая:
а) X > 0, Y >0, X + Y > 0 (X и Y слагаемые числа),
б) X > 0, Y <0, X + Y < 0
в) X > 0, Y <0, X + Y > 0
г) X < 0, Y <0, X + Y < 0
13. Укажите, при каких условиях возникает циклический перенос?
14. Как преобразовать обратный код в двоичное число?
15. Как производится суммирование двух чисел (с учетом их знака) в дополнительном коде? Рассмотрите случаи б,в,г вопроса 4.
16. Как преобразовать дополнительный код в двоичное число?
17. Чем отличается модифицированный обратный код и дополнительный код от обычного обратного и дополнительного кодов?
18. Заполните таблицу 1.
19. Представьте десятичные числа +0 и –0 в обратном и дополнительном кодах. Сделайте вывод об однозначности представления 0 в этих кодах.
20. Объясните принцип работы схем рис. 7,8,9.
Литература
1. Токхейм Р. Основы цифровой электроники. – М.: Мир, 1988. – С. 210-216, 218-221
2. Грицевский П.М., Мамченко А.Е., Степенский Б.М. Основы автоматики и вычислительной техники. –М.: Радио и связь,1987, - С. 136-138.
3. Мальцева Л.А. и др. Основы цифровой техники. – М.: Радио и связь, 1986. – С. 53-54.
4. Шило В.Л. Популярные цифровые микросхемы. – М.: Радио и связь, 1988. – С. 157-158.
5. Стрыгин В.В., Щарев Л.С. Основы вычислительной, микропроцессорной техники и программирования. - М.: Высшая школа, 1989. -С. 56-57, 64-68, Ш-П4.
6. Орлов И.А., Корнюшко В.ф. Основы вычислительной техники и организация вычислительных работ. - М.: Энергоатомиздат, 1984. -С. 20-31.
7. Токхейм Р. Основы цифровой электроники. - М.: Мир, 1988. -С. 223-227, 241-248.
8. Грицевский Q.M., Мамченко А.Е. , Степенский Б.М. Основы автоматики, импульсной и вычислительной техники. - М.: Радио и связь, 1987. - С.180-187.
ПРАКТИЧЕСКАЯ ЧАСТЬ
Задание 1.
1. Используя ЛЭ, сконструируйте полный сумматор. Для выявления структуры сумматора заполните его таблицу истинности, запишите логические уравнения для суммы Si и переноса Рi,приняв во внимание, что перенос Рi-1 будет суммироваться со слагаемым Аi и Вi. Полученные для Si и Рi логические уравнения минимизируйте и, опираясь на них, разработайте схему полного сумматора.
2. Используя ЛЭ, сконструируйте полный вычитатель. Соберите на УЛС разработанную вами схему полного сумматора. Различные варианты комбинаций слагаемых Аi и Вiи переноса Рi-1 вводите с клавиатуры.
3. Экспериментально получите таблицу истинности полного сумматора.