Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Тема 6.1 Арифметическая обработка данных




Арифметическая обработка числовых данных обычно выполняется с использованием математического сопроцессора (FPU – Floating Point Unit, NPR – Numeric PRocessor), который сначала выполнялся в виде отдельной микросхемы (i8087 – i80387), а начиная с процессора i80486DX встраивается в состав основного процессора. Сопроцессор называется так потому, что может работать параллельно с процессором после инициализации. Языки высокого уровня используют его непосредственно, а ассемблер порождаетESCкоманды.

Независимоот наличиясопроцессора, выполнение командFPUможет бытьосуществленотремя способами:

1. С использованием библиотеки альтернативной математики: считается, что сопроцессор отсутствует и выполнение команд FPU моделируется на уровне операций основного процессора.

2. С использованием библиотеки эмулятора: автоматически определяется наличие сопроцессора, и если он есть, то выполняет команды FPU, а иначе их выполнение эмулируется (моделируется на уровне микро-операций) основным процессором.

3. При отсутствии математического сопроцессора возникает прерывание и выполнение программы прекращается.

Первый способ– самый медленный и сейчаспрактически не применяется. Второй способ не всегда

совместим с некоторыми резидентными программами (одни и те же прерывания используются для эмулятораирезидентныхпрограмм). Третийспособ самый быстрыйи сейчасявляетсяосновным.

Назначение математического сопроцессора

Расширение вычислительных возможностей основного процессора – выполнение арифметических операций над целыми и вещественными числами с точностью до 18 десятичных разрядов, вычисление основных математических функций (экспоненты, логарифмы и тригонометрические) и т. д. Применение сопроцессора повышает производительность вычислений в сотни раз.

Типы данных математического сопроцессора

Сопроцессор поддерживает 7 типов данных: три целых (16 бит – Word Integer, 32 бит – Short Integer и 64 бит– Long Integer), 80-битные двоично-десятичные целые (Packed Decimal) и три формата с плавающей запятой, представленые в табл. 2. 4.

       

Таблица 2. 4

   

 

   
  Разрядность (порядка-

Точность в десятичных

Диапазон  
  p/мантиссы-m)

разрядах

изменения  
           
(8/24) Короткое / 7 10-38 - 1037  

вещественное

       
           
(11/53) Длинное / 16 10-308 -  

вещественное

     
           

80 (15/65) Расширенное 18 / 19 10-4932 -
вещественное  
     

Сопроцессор выполняет все вычисленя в 80-битном раширенном формате, а 32-битный и 64битный форматы используются для обмена данными с основным процессором и памятью.

Кроме обычных чисел сопроцессор использует несколько специальных данных, получаемых при выполнении операций:

    p m
Положительная бесконечность

| 1 … 100 … 0

Отрицательная бесконечность

| 1 … 100 … 0

Неопределенность

| 1 … 110 … 0

Не число | 1 … 1 1Х…Х, где Х…Х ≠ 0

Регистры математического сопроцессора

Сопроцессор предоставляет для хранения и обработки данных восемь дополнительных 80битных регистров R0–-R7, организованных в виде закольцованного аппаратного стека ST(0) – ST(7), вершина которого обозначается ST, ST(0) или TOP, а более глубокие регистры ST(1) – ST(7). Так,

например, если ST = R5, то ST(1) = R6, ST(2) = R7, ST(3) = R0 и т. д.

Кроме того, сопроцессор использует пять вспомогательных регистров:

1. Регистр управления CR – задает режим обработки данных: маскирование ошибок (некорректная операция, деление на 0, переполнение и т. д. ), точность обработки (расширенная, двойная, одинарная), способы округления (к ближайшему числу, к нулю, к +∞ или к -∞ ).

2. Регистр состояния SR – содержит: флаги особых случаев, возникающих в результате выполнения операций (IE - некорректная операция, DE - денормализованный операнд, ZE – деление на ноль, OE – переполнение, UE – антипереполнение, PE – неточный результат); флаги условий, возникающие при операциях сравнения; поле указателя вершины стека ST или TOP; бит B занятости сопроцессора.

3. Регистр тегов TW – содержит двухбитовое поле для каждого из восьми числовых регистров сопроцессора

TW(i) ST(i)

вещественное число, не равное нулю
вещественное число, равное нулю
не число

11не инициализировано

4. Регистр указателя команды FIP – содержит адрес последней выполненной команды.

5. Регистр указателяоперандаDIP– содержит адресоперанда последней выполненнойкоманды.

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

При программировании обработки выражений в сопроцессоре они представляются в виде польской инверсной записи (ПОЛИЗ или RPN – Reversed Poland Notation). Любое выражение преобразуетмя к постфиксному виду (бесскобочная запись).

Примеры:

1.

f: = (a + b) * pi – c

преобразуется к виду ab + pi * c – f: =

2. f: = atan ( sqrt (x2 / (x2 - 1) ) преобразуется к виду xx * xx * 1 - / sqrt atan f: =

Фрагмент программы на Ассемблере, реализующей с помощью FPU вычисление выражения из

первого примера, имеет вид.

 

Data Segment

   
a DQ 2. 5    
b DQ 6. 0    
c DQ 3. 5    
f DQ ?    

Data EndS

   

Code Segment

   

Assume cs: Code, ds: Data

 

Public f

   

Expression Proc Far

   
Fld a ; a à  st(0)  
Fld b ;

b à  st(0), a à st(1)

Fadd ;

st(0) + st(1) à  st(0) или (a+b) à  st(0)

Fld pi ;

pi à  st(0), (a+b) à st(1)

Fmnl ;

st(0) * st(1) à  st(0) или (a+b)*pi à  st(0)

Fld c ;

c à  st(0), (a+b)*pi à st(1)

Fsub ;

st(0) – st(1) à  st(0) или (a+b)*pi - c à st(0)

Fstp f ;

f: = st(0); st(1) à st(0)

Ret      

Expression EndP

Code EndS

 

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...