WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     || 2 | 3 | 4 | 5 |   ...   | 13 |
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Государственное образовательное учреждение высшего профессионального образования ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ Н. П. Вашкевич, Е. И. Калиниченко ОСНОВЫ АРИФМЕТИКИ ЦИФРОВЫХ ПРОЦЕССОРОВ Учебное пособие ПЕНЗА 2010 ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Государственное образовательное учреждение высшего профессионального образования «Пензенский государственный университет» (ПГУ) Н. П. Вашкевич, Е. И. Калиниченко Основы арифметики цифровых процессоров Допущено Учебно-методическим объединением вузов по университетскому политехническому образованию в качестве учебного пособия для студентов высших учебных заведений, обучающихся по специальности 230101 «Вычислительные машины, комплексы, системы и сети» Пенза Издательство ПГУ 2010 1 УДК 681.3 В23 Р е ц е н з е н т ы :

кафедра «Вычислительные машины и системы» ГОУ ВПО «Пензенская государственная технологическая академия»;

доктор технических наук, профессор, заведующий кафедрой «Вычислительные системы и моделирование» ГОУ ВПО «Пензенский государственный педагогический университет им. В. Г. Белинского» В. И. Горбаченко Вашкевич, Н. П.

В23 Основы арифметики цифровых процессоров : учеб. пособие / Н. П. Вашкевич, Е. И. Калиниченко. – Пенза : Изд-во ПГУ, 2010. – 160 с.

ISBN 978-5-94170-290-9 Рассматриваются системы счисления, используемые при работе с цифровыми процессорами, форматы операндов цифровых процессоров (с фиксированной точкой, с плавающей точкой, BCD-коды), кодирование операндов, алгоритмы арифметических и логических операций во всех форматах и кодах, алгоритмы арифметики многократной точности, контроль выполнения арифметических операций, контроль передачи цифровой информации. Каждый раздел сопровождается большим количеством детальных примеров.

Учебное пособие подготовлено на кафедре «Вычислительная техника» и предназначено для студентов специальности 230101 при изучении дисциплины «Информатика» (I часть), выполнении курсового проектирования по дисциплинам, связанным с разработкой алгоритмов цифровой обработки сигналов; может быть использовано студентами других специальностей при изучении алгоритмов работы цифровых устройств.

УДК 681.ISBN 978-5-94170-290-9 © ГОУ ВПО «Пензенский государственный университет», ОГЛАВЛЕНИЕ Предисловие........................................................................................................... 1. Системы счисления, используемые при работе с цифровыми процессорами.................................................................................................... 2. Форматы представления чисел в цифровых процессорах..........................2.1. Формат с фиксированной точкой...................................................................2.2. Формат с плавающей точкой..........................................................................2.3. Формат двоично-десятичного кода................................................................3. Кодирование чисел в цифровых процессорах..............................................3.1. Представление операндов в прямом коде......................................................3.2. Представление операндов в дополнительном коде........................................3.3. Представление операндов в обратном коде...................................................4. Алгоритмы базовых арифметических операций в цифровом процессоре........................................................................................................4.1. Алгоритмы операции сложения.....................................................................4.1.1. Алгоритм сложения операндов в дополнительном коде............................4.1.2. Алгоритм сложения операндов в обратном коде.........................................4.1.3. «Исключительные» случаи при выполнении операции сложения (вычитания)..................................................................................................4.1.4. Алгоритм вычитания операндов..................................................................4.1.5. Алгоритмы сложения и вычитания целых чисел без знака (беззнаковая или модульная арифметика)...................................................4.2. Алгоритмы операций сдвига в цифровых процессорах................................4.2.1. Логический сдвиг.........................................................................................4.2.2. Циклический сдвиг......................................................................................4.2.3. Арифметический сдвиг................................................................................4.3. Алгоритм операции сложения (вычитания) в формате с плавающей точкой.............................................................................................................4.4. Поразрядные логические операции в цифровых процессорах......................4.5. Алгоритмы умножения в цифровых процессорах..........................................4.5.1. Алгоритм умножения целых беззнаковых чисел в формате с ФТ..............4.5.2. Алгоритм умножения целых чисел в формате с ФТ в прямом коде...........4.5.3. Алгоритм умножения целых чисел в дополнительном коде......................4.5.4. Алгоритм умножения двоичных дробных чисел в формате с ФТ..............4.5.5. Алгоритм умножения чисел в формате с плавающей точкой.....................4.6. Алгоритмы деления в цифровых процессорах...............................................4.6.1. Алгоритмы деления целых чисел в формате с ФТ......................................

4.6.2. Деление целых двоичных чисел в формате с ФТ в прямом коде...............4.6.3. Деление целых чисел в формате с ФТ в дополнительном коде..................4.6.4. Деление дробных чисел в формате с ФТ.....................................................4.6.5. Алгоритм деления чисел в формате с ПТ (формат КВ)...............................4.7. Ускорение операции умножения в цифровых процессорах............................ 4.8. Выполнение арифметических операций в цифровых процессорах с многократной точностью........................................................................... 4.9. Операции сложения и вычитания в BCD-кодах........................................... 4.9.1. Получение дополнительного кода двоично-десятичных чисел................ 4.9.2. Алгоритм сложения (вычитания) целых беззнаковых чисел в BCD-кодах.............................................................................................. 4.9.3. Алгоритм сложения (вычитания) целых чисел со знаком в BCD-кодах.. 4.10. Выполнение операций сдвига в BCD-кодах на один двоичный разряд.... 4.10.1. Алгоритмы умножения в BCD-коде 8421................................................ 4.12. Алгоритм деления чисел в BCD-кодах....................................................... 5. Контроль выполнения арифметических операций................................... 5.1. Выбор значения модуля и вычисление вычета.............................................5.2. Контроль арифметических операций над беззнаковыми числами.............. 5.3. Выполнение контроля арифметических операций над числами со знаком 6. Контроль передачи информации в цифровых каналах связи................. 6.1. Коды для обнаружения ошибок.................................................................... 6.2. Код Хэмминга для обнаружения и исправления ошибки............................Заключение......................................................................................................... Список литературы............................................................................................... Предисловие Специалистам в области информатики (computer science), занимающимся разработкой специализированных цифровых устройств на базе программируемых логических интегральных схем, программированием на языках низкого уровня, таких, как Ассемблер, С++, созданием драйверов цифровых устройств, нужно хорошо представлять, как работает цифровой процессор «изнутри», знать используемые форматы представления операндов, область использования каждого из них, способы кодирования операндов и алгоритмы перевода чисел в коды и обратно, алгоритмы базовых арифметических операций в разных форматах и кодах.

Такие знания позволят разработчику аппаратных и программных средств правильно выбирать решение на каждом этапе проектирования. В качестве примера покажем, к чему может привести выбор неправильного формата данных. В свое время одному из авторов данного пособия довелось принимать участие в разработке программного обеспечения для контроллера, управляющего промышленным объектом. Одна из задач при этом – получить сумму измерений на заданном временном интервале от датчика измерения напряжения и вычислить среднее значение. Изначально были выбраны формат целых чисел с фиксированной точкой и соответствующая ему арифметика. После того как программное обеспечение было разработано, при опытных испытаниях обнаружилось «неадекватное» поведение контроллера. Дальнейшие исследования показали, что при накоплении измерений от датчика напряжения часть измерений была равна нулю, что существенно искажало реальный результат. Оказалось, что в промышленных условиях из-за помех объект управления, к которому подключался датчик, давал такие «выбросы» напряжения, что результат измерения не помещался в разрядную сетку, т.е. старшие разряды терялись, и получался результат измерения, близкий к нулю.

Решением этой проблемы стало использование формата дробных чисел с фиксированной точкой и соответствующей ему арифметики.

В этом случае при «выбросах» напряжения терялись младшие разряды результата измерения, что практически не искажало реальный результат. И если бы это решение было принято изначально, то не надо было бы переделывать программное обеспечение, что сократило бы время разработки контроллера.

В главе 1 рассматриваются системы счисления, используемые при работе с цифровыми процессорами, способы перевода чисел из одной системы в другую, двоичная система, так как она применяется для представления чисел внутри процессора. Также рассматриваются восьмеричная и шестнадцатеричная системы как широко используемые промежуточные системы между двоичной и десятичной. В главе 2 детально описываются форматы представления чисел в цифровых процессорах (с иллюстрацией многочисленными примерами) с фиксированной и плавающей точкой, а также BCD-формат. Глава отведена под способы кодирования чисел в цифровых процессорах, а также сравнения их достоинств и недостатков. В главе 4 рассматриваются алгоритмы выполнения арифметических операций для всех форматов чисел и способов их кодирования, а также методы ускорения операции умножения и арифметика многократной точности.

В главе 5 показываются способы контроля арифметических операций, а в главе 6 – способы контроля передачи информации в каналах связи.

Чтобы лучше усвоить материал пособия, авторы рекомендуют по каждому алгоритму выполнить вначале самостоятельно примеры, приведенные в пособии, а затем придумать и выполнить свои примеры с проверкой полученных результатов.

1. Системы счисления, используемые при работе с цифровыми процессорами Большинство кодов, применяемых в цифровых процессорах, основано на системах счисления, использующих позиционный принцип образования числа, при котором значение каждой цифры зависит от ее положения в числе. Примером позиционной формы записи чисел является та, которой обычно пользуется человек (арабская форма записи чисел). Так, в числах 87 и 78 значения цифры 7, определяется ее положением в числе: в первом случае она обозначает семь единиц, а во втором – семь десятков. При арабской записи, для десятичного числа 625 его полное значение рассчитывается по формуле 6*102 + 2*101 + 5*100 = 625.

Здесь и в дальнейшем символ * означает операцию умножения.

В информатике используются в основном четыре системы счисления (все – позиционные): двоичная (представление информации в процессоре), восьмеричная, шестнадцатеричная (как промежуточные между процессором и человеком) и десятичная (используемая человеком).

Двоичная система счисления используется для кодирования дискретного сигнала, который обрабатывает вычислительная техника. Это определяется тем, что двоичный сигнал просто представляется на аппаратном уровне (триггер установлен – "1", сброшен – "0"). Любая позиционная система счисления характеризуется основанием и базой. Основание системы счисления – это количество символов, используемых в каждой позиции (отсюда и берется название системы) для представления числа, а база – сами символы. Ниже в табл. 1.1 для всех четырех систем представлена используемая база (выделено серым цветом).

Используются следующие обозначения систем счисления, в которых представлены числа:

- для двоичных чисел – нижний индекс справа от числа в виде цифры 2 в скобках или буквы В (либо b) (binary – двоичный), либо знак B или b справа от числа. Например, 101000(2) = 101000b = =101000B = 101000B = 101000b;

- Таблица 1. Системы счисления Системы счисления Двоичная Восьмеричная Шестнадцатеричная Десятичная 0 0 0 1 1 1 10 2 2 11 3 3 100 4 4 101 5 5 110 6 6 111 7 7 1000 10 8 1001 11 9 1010 12 A 1011 13 B 1100 14 C 1101 15 D 1110 16 E 1111 17 F - для восьмеричных чисел – нижний индекс справа от числа в виде цифры 8 в скобках или букв O, o (octal – восьмеричный), либо знак O или o справа от числа. Например, 367(8) = 367O = 367o = = 367O = 367o;

- для шестнадцатеричных чисел – нижний индекс справа от числа в виде числа 16 в скобках или букв H, h (hexadecimal – шестнадцатеричный), либо знак H или h справа от числа. Например, 3AB(16) = = 3ABH = 3ABh = 3ABH = 3ABh.

Для перевода чисел из одной системы счисления в другую существуют определенные способы. Они различаются в зависимости от формата числа – целое или правильная дробь. Для вещественных чисел используется комбинация правил перевода для целого числа и правильной дроби. Рассмотрим различные способы перевода чисел из одной системы счисления в другую на конкретных примерах.

Перевод целых чисел. Надо перевести число 549 из десятичной в двоичную систему (рис. 1.1). Находим максимальную степень двойки, исходя из того, чтобы 2 в этой степени было меньше или равно исходному числу. Это будет 9, так как 29=512, а 210=1024, уже больше исходного числа. Тем самым, определяется и число разрядов результата в двоичной системе. Оно будет равно: 9+1=10 (будем нумеровать разряды двоичного числа, начиная с младшего разряда, номер которого равен 1). Результат будет иметь вид 1*********, где вместо * будут стоять двоичные цифры. Найдем девятый разряд двоичного числа. Вычисляем 29 и вычитаем из исходного числа: 549–29=37. Так как, 28=256, а остаток 37 меньше 256, то девятый разряд будет нулем, т.е. 10********. Получаем восьмой разряд. Так как 27=128>37, то он также будет нуль – 100*******. Седьмой разряд 26=64>37 также оказывается нулевым. Тогда двоичная запись числа будет: 1000******.

25=32>37, и шестой разряд равен 1 (10001*****). Следующий остаток 37–32=5, для которого выполняется неравенство 24=16<5, что означает равенство нулю пятого разряда. 23=8>5 и четвертый разряд равен 0 (1000100***). 22<5, третий разряд =1 (100010001**). Следующий остаток 5–4=1, для которого 21>1, и второй разряд равен (1000100010*). 20=>1 и первый разряд равен 1 (1000100101). Таким образом получается разложение переводимого числа по степеням двойки:

549=1*29+0*28+0*27+0*26+1*25+0*24+0*23+1*22 +0*21+1*20.

Такой метод очень трудоемок, поэтому на практике используется другой способе перевода целых чисел, основанный на операции целочисленного деления. Рассмотрим то же самое число 549. Разделив его на 2, получим частное 274 и остаток 1. Выполним ту же самую операцию с числом 274. Получим частное 137, остаток 0. Опять делим полученное частное на 2, и так до тех пор, пока частное не станет меньше делителя. Теперь для того чтобы получить число в двоичной системе счисления, нужно записать в обратном порядке все полученные в процессе деления остатки (рисунок 1.1).

Рис. 1.1. Перевод чисел из десятичной системы в двоичную Эти два способа применимы при переводе целых чисел из одной позиционной системы в другую. Действия вычитания, умножения выполняются в исходной системе. Рассмотрим перевод числа 500(10) в систему счисления с основанием 16.

Произведем разложение данного числа по степеням основания шестнадцатеричной системы. Искомое число будет состоять из трех цифр, так как 162=256<500<163=4096. Определим цифру старшего разряда. 1*162 =256<500<2*162=512, следовательно, число будет 1**, где вместо * будут стоять шестнадцатеричные цифры. Остаток равен:

Pages:     || 2 | 3 | 4 | 5 |   ...   | 13 |






















© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.