
- •12.09.2012 — Лекция №2
- •17.09.2012 — Лекция №3
- •23.09.2012 — Лекция №4
- •26.09.2012 — Лекция №5
- •1.10.2012 — Лекция №6
- •08.10.2012 — Лекция №7
- •08.10.2012 — Лекция №8
- •22.10.2012 — Лекция №10
- •24.10.2012 — Лекция №11
- •29.10.2012 — Лекция №12
- •07.11.2012 — Лекция №13
- •12.11.2012 — Лекция №14
- •19.11.2012 — Лекция №15
- •17.11.2012 — Лекция №16
- •20.11.2012 — Лекция №17
- •25.11.2012 — Лекция №18
- •03.12.2012 — Лекция №19
- •05.12.2012 — Лекция №20
- •10.12.2012 — Лекция №21
- •17.12.2012 — Лекция №22
- •19.12.2012 — Лекция №23
17.11.2012 — Лекция №16
Обычно в цифровых процессорах применяют форму представления данных в целых числах, а в сигнальных процессорах для обработки аналоговых сигналов применяется дробная форма представления чисел, т.к. с ее помощью удобнее моделировать работу реальных электрических цепей, через которые проходит сигнал.
Основной недостаток представления чисел с фиксированной точкой в том, что реализуется ограниченный (узкий) диапазон представления чисел, поэтому для расширения динамического диапазона представления чисел с плавающей точкой – в экспоненциальном виде, при этом каждое число состоит из двух элементов – мантисса и порядка, основание системы счисления выбирается для удобства представления чисел.
В ЭВМ применяется основание системы счисления двоичное М*2Р , причем число считается нормализованным, если выполняется условие 2-1≤М≤1. Мантисса числа определяет точность числа, а порядок определяет диапазон представления чисел. В ЭВМ число с плавающей представляется в следующем виде:
BM |
BHP |
Pjjjjjjjjj |
M=24 бит хорошо |
Такой формы представления чисел обычно достаточно для обработки реально измеренных данных. Для мощных вычислительных систем применяется более точное кодирование. Для обеспечения очень высокой точности реализуется многобайтная структура для представления мантисса и порядка. В IBM PC собственный стандарт 80 бит.
Если мантисса выходит за установленный диапазон, то нужно выполнить операцию нормализации – т.е. изменить мантиссу путем: число умножаем на 2, если делит то +1/-1 порядка соответственно.
Операция умножения чисел с плавающей точкой сводится к перемножению мантисс и сложению соответствующих порядков с последующей нормализацией
M12p1+M2 2p2=(M1+M2)2p1+p2
M12p1/M2 2p2=(M1/M2)2p1-p2
Операция сложения или вычитания – более сложная операция, т.к. их можно выполнять только с предварительным выравниванием порядков – операция денормализации, при этом число с большим порядком остается без изменения, а с меньшим порядком денормализуется путем сдвига вправо содержимого мантиссы и увеличения порядка до тех пор, пока порядки не выровняются.
p1>p2 p1=p2+n M12p1+M2 2p2=M12p1+(M2/2n) 2p1
После этого мантиссы складываются, если необходимо производят операцию нормализации. 0,100(р=0)+0,10(р=-1)=0,1*20 + 0,01*20=0,11*20=0,75
Обычно обработка чисел с плавающей точкой осуществляется с помощью специальных библиотек, которые заранее разрабатываются в зависимости от требуемой точности или специальных арифметических сопроцессоров, но применение сопроцессоров всегда ограничивает функциональную возможность системы, хотя и повышает быстродействие, поэтому в зависимости от цели разработки системы нужно обосновывать применение библиотек или аппаратных средств.
20.11.2012 — Лекция №17
Реализация операции умножения в ЭВМ:
Умножение в ЭВМ осуществляется только для целых положительных чисел, поэтому числа в других формах нужно преобразовывать в целые числа, а знаки заполнить в отдельных флагах. Число из дробных в целое можно умножить на число, кратное двум. Операция умножения выполняется путем сдвига и сложения, т.к. таблица умножения двоичных чисел состоит из четырех чисел.
Алгоритм умножения рассмотрим на примере умножения однобайтных чисел со сдвигом множимого влево. Алгоритм заключается в следующем:
1. Обнуляем рабочий регистр двойной длины, в котором будут накапливаться частные суммы
2. Проверяется младший бит множителя, если он равен единице, то множимое прибавляется к частной сумме, если равен нулю, то операция сложения пропускается.
3. Сдвигается множимое на 1 разряд влево и проверяется следующий бит множителя, т.е переходим к пункту 2.
17h*12h=0CCh
Таким образом, операция умножения заменяется двумя операциями – сложением и сдвигом в цикле, число циклов определяется числом разрядов множителя. Знаки чисел обрабатываются по правилам алгебры логики (исключающее ИЛИ) и знак присваивается результату.
Алгоритм деления чисел заключается в выполнении трех операций – вычитание, сдвиг, восстановление остатка. Операция деления более сложна, чем умножение, т.к. перед делением нужно всегда проверить, не равен ли делитель нулю или старший байт делимого не должен быть больше делителя, иначе будет переполнение разрядной сетки.
Кроме того, нужно преобразовать делимое и делитель в форме целых положительных чисел, знаки запомнить. Потом присвоить знак результату.
После выполнение операции деления кроме частного может быть остаток, что с ним делать, зависит от задачи, которая выполняется по данному алгоритму. Если нужно получить дробную часть результата, то остаток опять как число делится на делитель, получаем значение результата после значащей точки. Пример деления однобайтных чисел со сдвигом делимого влево и восстановлением остатка ОССh/12h=17h.
1. Выделяется один рабочий регистр для формирования частного(результата), обнуляется регистр расширения делимого, в котором будет находиться остаток.
2. Сдвиг содержимого остатка и делимого влево на один разряд
3. Из сдвинутого значения (остатка) вычисляется содержимое делителя
4. Проверяется, если результат вычитания положительный (т.е отсутствует бит переноса), заёма), то в старший бит частного записывается единица, путем инвертирования бита переноса, если результат вычитания отрицательный, то к полученной разности прибавляется делитель, т.е восстанавливается остаток и алгоритм переходит к пункту 2.
В ЭВМ общеизвестный алгоритм преобразования из одной системы счисления в другую путем деления на основание системы счисления не применяется, так как он трудоемкий. Применяются более простые и быстродейственные алгоритмы. Из одной системы счисления в другую можно применить с помощью таблиц, реализованных именно на ППЗУ или на дешифраторах-шифраторах.
Преобразовывать можно с помощью счетчиков, имеющих различные модули счета, но этот способ имеет недостаток: медленное быстродействие при больших числах, поэтому иногда применяют преобразование системы счисления на основе таблицы констант.
Можно реализовать по этому алгоритму, описывающего принцип формирования позиционной системы счисления. Достоинства этого алгоритма: высокое быстродействие, т.к. константа уже заранее записана в таблице. Недостаток: в зависимости от числа разрядов нужно иметь различные таблицы. an10n+a n-110n-1+…+a1101+a0100=((an)10+ an-1)10+… a1)10+ a0=x
Поэтому наибольшее распространение в ЭВМ получил алгоритм, у которого константы формируются в процессе преобразования. Согласно этому алгоритму нужно выполнить следующее:
1. Нужно обнулить рабочую ячейку, в которой будет накапливаться сумма, в конце алгоритма будет находиться результат преобразования, т.е. будет находиться само число х.
2. Начиная со старшего разряда десятичного числа прибавлять значение этого разряда к сумме и умножать полученную сумму на 10. Все действия нужно выполнить по правилам двоичной арифметики. Число циклов равно числу разрядов десятичного числа, цикл повторяется со второго пункта. Пример: 12510=х2
0000.0000 0001
0000.0001
00000100
00000101
00001010
0010
00000100
00110000
00111100
01111000
0101
01111101
Алгоритм преобразования из двоичной системы счисления в десятичную.
an2n+a n-12n-1+…+a121+a020=(((an)2+ an-1)2+… a1)2+ a0
В ЭВМ применяется следующий алгоритм преобразования, в котором константы в виде степеней по основанию два формируются в процессе вычисления, при этом все операции выполняются в BCD-кодах, т.е. процесс преобразования сводится к операции удвоения суммы и преобразованию в BCD-код:
1. Обнуляется рабочая ячейка, в которой будет накапливаться сумма, в конце будет результат.
2. Сдвигается содержимое двоичного числа на один разряд влево с помощью команды логического сдвига SHL с учетом переноса, т.е старший бит двоичного числа уходит в бит переноса.
3. Операция умножения на 2 заменяется операцией сложения с учетом переноса, т.е. командой ADC.
4. Применяем команду десятичной коррекции после операции сложения (команда DAA). Повторяем число циклов, начиная со второго пункта, равную количеству разрядов двоичного числа
Для вычисления элементарных функций применяется разложение этой функции в ряд Тейлора. Однако для получения требуемой точности необходимо большое число членов ряда и выполнение операций умножение и деление, что существенно замедляет работу алгоритма, поэтому в простейших микропроцессорных системах, работающих системах управления используются методы вычисления итерационные «цифра за цифрой» (цепные дроби). Эти методы лежат в основе алгоритмов Меджитта и Вольдера, этот алгоритм сводится к операциям сдвига и сложения, аналогично предыдущим операциям. Для получения требуемой точности (числа двоичных разрядов результата) нужно выполнить столько циклов, сколько нужно получить точных двоичных разрядов. Его единственный недостаток – нужно помнить таблицу констант для каждой функции отдельно, констант нужно столько, сколько двоичных разрядов в результате. Если нужно очень быстрое преображение или вычисление функций, то применяют обычные табличные методы.
Анализ точности результатов вычислений на ЭВМ.
При разработке любого ПО для системы управления в первую очередь нужно анализировать точность получаемых результатов. Точность характеризуется величиной погрешности.
Причины возникновения погрешностей:
1. Несовершенство теории оценки погрешности
2. Приближенный характер исходных данных
3. Неточность выполнения арифметических операций
4. Несовершенство алгоритмов вычислений