Автор работы: Пользователь скрыл имя, 01 Мая 2012 в 00:40, курсовая работа
К основным арифметическим операциям относятся сложение, вычитание, умножение и деление. Время их выполнения определяет быстродействие ЭВМ. Автоматическое выполнение не основных операций организуется в том случае, если такая операция составляет не менее 2% от общего числа операций или является составной частью алгоритмов, которые необходимо выполнять в реальном времени, т.е. с большим быстродействием. Не основные арифметические операции реализуются обычно с помощью стандартных программ, которые входят в состав математического обеспечения ЭВМ и вызываются простым обращением к соответствующей библиотеке подпрограмм. Однако для реализации этих подпрограмм требуется значительно больше времени, чем для выполнения основных арифметических операций.
Министерство образования Российской Федерации
Кафедра ЭВМ
ЗАДАНИЕ НА КУРСОВОЙ ПРОЕКТ (РАБОТУ)
Студент_______________________
фамилия, инициалы
1.Тема ______________________________
______________________________
2. Срок представления проекта (работы) к защите "____"__________2011 г.
3. Исходные данные для проектирования (научного исследования)
______________________________
4.1.__________________________
4.2.__________________________
4.3.__________________________
4.4.__________________________
4...__________________________
5. Перечень графического материала: ______________________________
______________________________
Руководитель проекта (работы) ________________ _________________
подпись, дата инициалы, фамилия
Задание принял к исполнению ____________ "___"______2011 г.
подпись
Министерство образования Российской Федерации
Кафедра ЭВМ
СОГЛАСОВАНО
Гл. специалист предприятия
(для которого выполнен В.А. Григорьев
реальный проект (работа)
_____________________
подпись, инициалы, фамилия
"___"___________2011 г. "___"___________2011 г.
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовому проекту (работе) по ______________________________
на тему:_________________________
______________________________
Автор проекта (работы)______________________
Специальность ______________________________
Обозначение курсового проекта (работы) _________Группа______________
Руководитель проекта _________________ __________________________
подпись, дата
Проект (работа) защищен (а) ___________ Оценка________________
Члены комиссии:
______________________ ________________
подпись, дата
______________________ ________________
подпись, дата
______________________ ________________
подпись, дата
Тверь 2011
К основным арифметическим операциям относятся сложение, вычитание, умножение и деление. Время их выполнения определяет быстродействие ЭВМ. Автоматическое выполнение не основных операций организуется в том случае, если такая операция составляет не менее 2% от общего числа операций или является составной частью алгоритмов, которые необходимо выполнять в реальном времени, т.е. с большим быстродействием. Не основные арифметические операции реализуются обычно с помощью стандартных программ, которые входят в состав математического обеспечения ЭВМ и вызываются простым обращением к соответствующей библиотеке подпрограмм. Однако для реализации этих подпрограмм требуется значительно больше времени, чем для выполнения основных арифметических операций.
Вместе с тем в настоящее время существенно повысилась степень интеграции и снизилась стоимость электронных компонентов ЭВМ. В связи с этим стал актуальным вопрос о передаче части функций МО ЭВМ аппаратным средствам. Прежде всего это касается выполнения сложных арифметических операций, таких как перевод чисел из одной системы счисления в другую, вычисление численного значения многочлена, вычисление элементарных функций, извлечение корня квадратного, выполнение операций комплексной арифметики. При этом интерес представляет исследование таких методов вычислений указанных операций, которые допускают аппаратную реализацию за время, соизмеримое со временем выполнения основных операций.
Естественно, что алгоритм выполнения неосновных арифметических операций, ориентированные на аппаратурную реализацию, как правило, существенно отличаются от алгоритмов программной реализации, так как первые обычно строятся на основе многократного выполнения операций сложения и сдвигов.
Имеются два пути решения задачи извлечения корня квадратного.
Первый способ связан с разработкой микропрограммы извлечения корня квадратного с использованием набора основных арифметических операций. При этом программа реализует один из известных итерационных методов извлечения корня с помощью базовой аппаратуры. Например, в универсальных ЭВМ используется обычно известная формула Ньютона:
Bi+1 = 0,5 (Bi + A/Bi ) ,
где Bi+1 есть (i+1)-е приближение , i=0, 1, 2, ...
Второй способ состоит в создании алгоритма, похожего по структуре на алгоритмы основных арифметических операций, например, деления.
Наиболее простой алгоритм сводится к подбору цифр результата разряд за разрядом, начиная со старшего, т.е. имеющего вес 2-1.
Вычисление i-й цифры В:
после получения (i-1)-й цифры В (bi-1) в i - й разряд В для пробы помещается 1.
вычисляется разность (A - Bi)2=Ri.
если Ri > 0, то сохраняется bi=1, иначе bi = 0.
перейти к вычислению (i+1)-й цифры.
Определение остатка Ri = A - является сложной процедурой, выполнение которой нежелательно. Поэтому используется рекуррентная формула для получения Ri из Ri-1. Допустим, что найдены первые (i-1) цифр из B=0,b1b2b3...bi-1. Очевидно, что Bi-1 - наибольшее число из (i-1) разрядов, для которого т.е.
Следующая i-я цифра т.е. Bi=0,b1b2...bi-10 или Bi=0,b1b2...1.
При Ri 0 принимается bi=1, иначе bi=0.
Остаток Ri при bi=1 можно получить следующим образом:
Следующая цифра bi+1 определяется так же, если Ri 0. Если Ri < 0, то прежде чем вычислять следующую цифру, необходимо восстановить предыдущий остаток, т.е. получить
Затем в следующем такте вычислить следующий остаток:
Новая цифра результата равна инверсному значению знаковой цифры остатка Ri+1.
Таким образом, чтобы получить остаток Ri нужно к Bi-1 приписать справа пару цифр 01, сдвинуть его на (i-1) разрядов вправо и вычесть из предыдущего остатка Ri-1. Если Ri 0, то bi=1, если Ri < 0, то bi = 0. В последнем случае необходимо восстановить предыдущий остаток и приступить к вычислению следующей цифры.
Такой способ проще, чем вычисление разности . Он лучше поддается автоматизации и может быть реализован в виде самостоятельной операции.
Как и при делении можно отказаться от восстановления остатка. В этом случае, если Ri < 0, то bi=0, а в следующем цикле к Bi добавляется не 01, а 11 (дополнительный код) и вычитание заменяется сложением. Для доказательства этого приведем следующие преобразования:
При этом имеется в виду, что Bi-1=0,b1b2...bi-1, a Bi=0,b1b2...bi-10.
Таким образом, если Ri < 0, то в следующем такте вычитание заменяется сложением, в i-й разряд результата записывается 0, и в следующем такте к Bi приписывается справа не 01, а 11.
Таким образом сразу получается правильный остаток Ri-1, операция вычисления корня квадратного становится регулярной и подобной операции деления без восстановления остатка.
Вычисление корня квадратного подобно вычислению частного при делении. Роль делителя, постоянного в процессе деления, выполняет "переменный делитель" Bi, который сдвигается на один разряд вправо в каждом такте.
Как и при делении, вместо сдвига делителя вправо можно сдвигать остаток влево, предусмотрев использование модифицированного кода остатка из-за возможной потери знака при сдвиге влево.
Результат вычисления корня квадратного всегда получается с недостатком, поэтому желательно его округление. Для этого необходимо определить n+1 разряд корня.
Процесс вычисления корня квадратного состоит из однотипных циклов, в каждом из которых определяется очередная цифра корня. Значение очередной цифры определяет инверсия знака текущего остатка. При положительном остатке в результат заносится 1, а новое значение формируется путем приписывания к первым записанным цифрам результата пары 01. Если текущий остаток отрицателен, то в качестве очередной цифры результата выбирается 0, а для формирования очередного значения переменного делителя к текущему значению корня приписывается пара 11. Затем процедура повторяется.
Для извлечения корня квадратного из числа с плавающей запятой необходимо порядок числа разделить на 2, а из мантиссы извлечь корень по правилам для чисел с фиксированной запятой, приведенным выше. Если порядок нечетный, то необходимо прибавить к порядку 1, затем сдвинуть порядок и мантиссу на один разряд вправо. Так как мантиссы всегда нормализованы и в первом цикле из мантиссы производится вычитание числа 0,01, то первый остаток всегда будет положительным, т.е. первая цифра результата всегда будет 1. Следовательно, при выполнении извлечения корня квадратного никогда не может произойти нарушение нормализации.
Перед началом выполнения операции знак операнда и его величина анализируются на равенство 0. При нулевой мантиссе операция не производится, а результату сразу присваивается значение 0. Если знак операнда "-", вырабатывается требование прерывания.
Пример: вычислить корень квадратный из числа 598. 5982 = 1001010110, , 242 =11000. Вычисления проводить на ДСДК, сдвиг переменного делителя без восстановления остатка.
Для выполнения операции потребуются следующие структурные элементы:
Сумматор модифицированного кода на 12 разрядов (один дополнительный разряд для образования модифицированного кода, второй - для определения младшего разряда результата.
Регистр А (РгА) для приема операнда из памяти. Сдвиговый регистр (для сдвига мантиссы вправо при нечетном порядке)
Регистр В (РгВ) для хранения результатов вычисления значения корня квадратного. Сдвиговый регистр (сдвиг влево после определения очередной цифры результата).
Регистры D1, D2 (РгD1, РгD2) - вспомогательные регистры для хранения двух бит, приписываемых в конец переменного делителя в соответствии с приведенными выше формулами. Сдвигаются вправо после очередного подсуммирования переменного делителя к сумматору.
Регистр С (РгС) для хранения переменного делителя. Регистр С сдвигаем влево, а после подсуммирования регистров D1 или D2 сдвигаем на один разряд вправо.
Два счетчика для подсчета числа определенных цифр результата (СТ1) и числа сдвигов переменного делителя С (СТ2).
Инвертор для реализации сложения (вычитания) переменного делителя с содержимым сумматора.
При выполнении примера полагаем, что в начале выполнения операции текущий остаток равен содержимому РгА. Пример выполнения операции иллюстрируется Табл. 1.
Таблица 1.
СМ | РгВ | РгС | РгD1 | РгD2 | СТ1 | СТ2 |
00,0000000000 | 00,0000000000 | 00,0000000000 | 00,01 | 00,11 | 10 | 0 |
00,1001010110 |
|
|
|
|
|
|
00,1001010110 |
|
|
|
|
|
|
11,1100000000 |
| 00,0100000000 |
|
|
|
|
00,0101010110 | 00,0000000001 | 00,0000000001 | 00,001 | 00,011 | 9 | 9 |
11,1011000000 | 00,000000001* | 00,0000000010 |
|
|
| 8 |
00,0000010110 |
| 00,0000000100 |
|
|
| 7 |
11,1001100000 |
| 00,1000000000 |
|
|
| 0 |
11,1001110110 |
| 00,001 |
|
|
|
|
11,1001010000 |
| 00,1010000000 |
|
|
|
|
11,0011000110 |
| 00,0101000000 |
|
|
|
|
11,1001101000 | 00,0000000011 | 00,0000000011 | 00,0001 | 00,0011 | 8 | 8 |
10,1100101110 | 00,000000011* | 00,0000000110 |
|
|
| 7 |
СМ=0 (Sg1=1 Sg2=0) |
| 00,1100000000 |
|
|
| 0 |
выход из цикла |
| 00,0001 |
|
|
|
|
|
| 00,1101000000 |
|
|
|
|
|
| 00,0110100000 |
|
|
|
|
| 00,0000000110 | 00,0000000110 | 00,00001 | 00,00011 | 7 | 7 |
| 00,000000110* | 00,0000001100 |
|
|
| 6 |
|
| 00,1100000000 |
|
|
| 0 |
|
| 00,00011 |
|
|
|
|
|
| 00,1101100000 |
|
|
|
|
|
| 00,0110110000 |
|
|
|
|
| 00,0000001100 | 00,0000001100 | 00,000001 | 00,000011 | 6 | 6 |
| 00,000001100* | 00,0000011000 |
|
|
| 5 |
|
| 00,1100000000 |
|
|
| 0 |
|
| 00,000011 |
|
|
|
|
|
| 00,1100110000 |
|
|
|
|
|
| 00,0110011000 |
|
|
|
|
| 00,0000011000 | 00,0000011000 | 00,0000001 | 00,0000011 | 5 | 5 |
Информация о работе Операция извлечения квадратного корня на логическом устройстве