Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Labs / 8_FPU / Lab8

.pdf
Скачиваний:
19
Добавлен:
16.04.2013
Размер:
348.4 Кб
Скачать

Лабораторная работа по курсу "Организация ЭВМ и систем"

Программирование сопроцессора

Цель работы: познакомиться с особенностями работы сопроцессора и его командами.

1. Введение

Сопроцессор (FPU) работает с данными в следующих форматах:

двоичные числа длиной 16, 32 и 64 бита;

упакованные BCD числа - максимальная длина 18 десятичных цифр (80 бит);

вещественные числа в коротком (32 бита), длинном (двойном, 64 бита) и расширенном (80 бит) форматах (рис. 1):

 

8

 

23

 

Короткий

s

Экспонента

 

Мантисса

 

 

 

формат

31

23

22

Неявная единичная целая

0

Знак

 

1

часть мантиссы

 

 

 

 

 

 

 

 

 

 

11

 

52

 

Длинный

s

Экспонента

 

Мантисса

 

формат

63

52 1 51

 

 

0

 

15

 

64

 

Расширенный

s

Экспонента

1

Мантисса

формат

79

64 63

Явная единичная целая

0

 

 

 

часть мантиссы

 

 

Рис. 1.

Форматы вещественных чисел

 

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

Отладка программ выполняется в отладчике Turbo Debugger. Для отображения регистров сопроцессора выберите пункт меню View|Numeric processor (рис. 2).

 

 

 

Значение

 

Значение в виде вещ.числа

 

 

 

 

 

 

 

 

 

 

в расширенном формате

 

 

Логический номер

Состояние

 

 

 

 

 

 

 

 

 

 

Регистры стека

 

Поля

 

 

 

 

 

управления

 

 

 

 

 

 

 

 

(регистр cwr)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 2. Вид окна сопроцессора в отладчике

Ниже приведены поля регистра управления сопроцессором cwr. Маски:

im (Invalid Operation Mask) - маска недействительной операции;

dm (Denormaliized Operand Mask) - маска денормализованного результата;

zm (Zero Divide Mask) - маска деления на нуль;

om (Overflow Mask) - маска переполнения;

Флаги

состояния (регистр swr)

1

um (Underflow Mask) - маска антипереполнения;

pm (Precision Mask) - маска особого случая при неточном результате;

iem - маска запроса на прерывание (для i8087).

Если значение какой-либо из перечисленных масок равно 1, то при возникновении исключения этого типа оно будет обрабатываться самим сопроцессором. Если значение маски равно 0, то при возникновении исключения этого типа будет возбуждено прерывание, которое должно быть обработано соответствующим обработчиком.

Управляющие биты регистра управления сопроцессором cwr:

pc (Precision Control) определяют точность вычислений: 3 - используется расширенная точность; 2 - результат округляется до двойной точности; 0 - результат округляется до одинарной точности.

rc (Rounding Control) определяет режим округления при выполнении операций с вещественными числами: 0 - округление к ближайшему целому; 1 - округление в направлении к отрицательной бесконечности; 2 - округление в направлении к положительной бесконечности; 3 - округление в направлении к нулю.

ic (Infinity Control) - управление значением бесконечность.

Врегистре состояния swr (см. рис. 2) находятся флаги исключений, которые соответствуют тем же исключениям, что и маски регистра cwr (см. выше). Значение флага, равное единице, указывает на возникновение соответствующего исключения. Помимо флагов в swr находятся также поле st - указатель вершины стека, сс - код условия (устанавливается командами сравнения и другими командами сопроцессора), ir - запрос на прерывание.

2. Порядок выполнения лабораторной работы

Задание 1.

1.1. Выполните программу ex.asm (файл ex.asm):

model small

100h

.stack

 

.data

dt

10

a

b

dw

3

c

dq

1.3e-1

res

dw

0

.code

 

ax, @data

begin: mov

 

mov

ds, ax

 

finit

a

 

fbld

 

fild

b

 

fld

c

 

fmul

 

 

fdiv

 

 

fistp res

exit: mov

ax, 4c00h

end

int

21h

begin

 

В отчете укажите а) форматы переменных a, b, c и res; б) по какой формуле вычисляется res? В комментарии к командам сопроцессора укажите назначение каждой команды и содержимое стека после выполнения команды (Пример: fbld a;загрузка BCD числа, ST0=a).

1.2. Выполните программу ex.asm в отладчике. Выпишите и расшифруйте в отчете биты результата, находящегося ST(0) (до его сохранения в res). Чему равен результат после его сохранения в res? Выполните программу в отладчике вторично. Перед сохранением результата установите управляющий бит rc равным 3. Чему равен res теперь и почему? Поясните в отчете.

Примечание 1. Для отображения содержимого регистров стека сопроцессора в шестнадцатеричном виде разверните окно сопроцессора на весь экран.

2

Примечание 2. В данной лабораторной работе для изменения значения управляющих битов и масок в регистре cwr используйте локальное меню отладчика.

1.3*. (Необязательное задание) Объясните в отчете, как маскирование исключений влияет на работу программы. Для этого специально создайте в программе какое-либо исключение при единичном и нулевом значении соответствующей маски в регистре cwr. Исследуйте следующие исключения:

1.Недействительная операция. Для вызова этого исключения передвиньте команду fmul на две строки вверх, в результате при умножении возникнет попытка чтения пустого стека.

2.Деление на ноль.

Укажите в отчете: какие флаги регистра swr сигнализируют о возникновении этих двух исключений; как обрабатываются исключения, когда маска=1 и маска=0.

Задание 2.

2.1. Составьте программу graph.asm построения графика функции в соответствии со своим вариантом (см. Приложение 2). Интервал изменения аргумента выберите самостоятельно. График должен располагаться примерно в центре экрана и иметь приемлемый размер. Отладьте и выполните программу. Результаты покажите преподавателю. Занесите в отчет содержимое регистров стека FPU в процессе выполнения команд сопроцессора.

Пример. Построить график функции y=sin(2t). Текст программы - в файле graph.asm.

.386

segment

use16

data

x360

dd

180.0

; константа перевода из градусов в радианы

cnt

dw

360

; число вычисляемых точек графика

color

db

12h

; цвет - желтый

x

dw

0

; текущие координаты точки

y

dw

?

; множитель 2

v2

dd

2.0

scale

dd

100.0

; константа для масштабирования координаты y

data

ends

 

 

code

segment

use16

 

assume

 

cs:code, ds:data

;********** Процедура изменения цвета пиксела (X,Y) **************

point proc

push

CX

 

; СХ - координата Х

mov

CX,x

 

add

CX,100

 

; DX - координата Y

mov

DX,y

 

add

DX,100

 

; АХ - № функции прерывания BIOS 10h

mov

AH,0Ch

 

mov

AL,color

; AL - цвет пиксела

mov

BH,0

 

; BH - номер видеостраницы

int

10h

 

 

pop

CX

 

 

ret

 

 

 

point endp

 

 

 

;********************

Главная процедура **************************

main proc

AX,data

 

mov

 

mov

DS,AX

 

 

mov

AH,0h ; № функции BIOS 10h - вывод пиксела

mov

AL,10h; № видеорежима - графический, 640х350

int

10h

; установка графического режима

mov

CX,cnt; загрузка счетчика цикла

finit

 

; инициализация сопроцессора

fldpi

x360

; загрузка числа пи

fld

; загрузка константы перевода

fdiv

 

; вычисление коэффициента перевода (пи/180)

3

do:

fstp

x360

;

и сохранение его в памяти

fld

x360

;

загрузка коэффициента перевода

 

fild

x

;

загрузка угла в градусах

 

fmul

v2

;

перевод его в радианы

 

fld

;

загрузка множителя 2

 

fmul

 

;

вычисление аргумента для sin(2x)

 

fsin

 

;

вычисление sin(2x) в ST(0)

 

fld

scale ;

загрузка масштаба по y

 

fmul

y

;

умножить результат на масштаб

 

fistp

;

запись коорд. y в память как целое с извлечением из стека

 

call

point

;

вывод точки на экран

 

inc

x

;

приращение угла на один градус

 

loop

do

; цикл

 

mov

AH,1

; задержка до нажатия клавиши

 

int

21h

 

mov

ax, 4c00h

main

int

21h

; выход в DOS

endp

 

 

 

code

ends

 

 

 

stk

segment

stack 'STACK'

stk

db

256 dup

(0)

ends

 

 

 

end

main

 

 

 

2.2.* (Необязательное задание) Добавьте в график оси координат.

Требования к отчету

Отчет должен содержать:

1)Тексты программ ex.asm и graph.asm (для своего варианта) с комментариями, подготовленные до лабораторной работы (дома).

2)Описание всех экспериментов с требуемыми пояснениями.

Источники информации

1.Рудаков П.И., Финогенов К.Г. Язык ассемблера: уроки программирования. - М.: ДИАЛОГМИФИ, 2001. (Глава 1)

2.Юров В.И. Assembler: Специальный справочник. 2-е изд. - СпБ.: Питер, 2004.

ПРИЛОЖЕНИЕ 1. Команды сопроцессора, используемые в лабораторной работе

Название

Число

Назначение

 

операндов

 

FABS

0

Абсолютное значение числа

FADD

0, 1, 2

Сложение двух действительных чисел

FBLD

1

Загрузка в вершину стека числа в BCD формате

FBSTP

1

Преобразование числа из вершины стека в BCD формат и выталкивание из

 

 

стека в поле памяти

FCHS

0

Инвертирование знака числа, находящегося в вершине стека

FCOS

0

80387+ Вычисление косинуса числа из вершины стека. Аргумент - в радианах,

 

 

его модуль не должен превышать 263

FDIV

0, 1, 2

Деление двух действительных чисел

FDIVR

0, 1, 2

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

FINIT

0

Инициализация сопроцессора

FIST

1

Преобразование числа из вершины стека в целое число и запись его в поле

 

 

памяти

FISTP

1

Преобразование числа из вершины стека в целое число и запись его в поле

 

 

памяти с выталкиванием из стека

FLD

1

Загрузка в стек действительного числа из поля памяти

FLD1

0

Загрузка числа 1 в вершину стека

FLDLG2

0

Загрузка в вершину стека числа ln2 (loge2)

4

Название

Число

Назначение

 

операндов

 

FLDPI

0

Загрузка числа π в вершину стека

FLDZ

0

Загрузка числа 0 в вершину стека

FMUL

0, 1, 2

Умножение двух действительных чисел

FPTAN

0

Вычисление тангенса угла, заданного в вершине стека

FSIN

0

80387+ Вычисление синуса числа из вершины стека. Аргумент - в радианах,

 

 

его модуль не должен превышать 263

FSINCOS

0

80387+ Одновременное вычисление синуса и косинуса. В STcos; в ST(1)-sin.

 

 

Аргумент - в радианах, его модуль не должен превышать 263

FSQRT

0

Вычисление квадратного корня

FST

1

Запись действительного числа из вершины стека в память

FSTP

1

Запись действительного числа из вершины стека в память с выталкиванием из

 

 

стека

FSUB

0, 1, 2

Вычитание двух действительных чисел

FSUBR

0, 1, 2

Вычитание двух действительных чисел в обратном порядке

FWAIT

0

Ожидание окончания работы сопроцессора

FXCH

0, 1

Обмен содержимым вершины стека с указанным регистром стека

ПРИЛОЖЕНИЕ 2. Варианты для программы graph.asm

ПК

МП-20

МП-24

МП-24а

МП-25

1

0.5sin(1.5x+2)

y=sin(t+1)

(1.2+x)/x2)

x3-x+8.7

 

 

x=2.1t

 

 

2

sin(x)/(cos(x)+1.1)

x=sin(t2)

cos(x-1)/sin(x)

0.1tg(0.9x+1)

 

 

y=cos(2.1t)

 

 

3

cos((0.7+x)x)

cos(x+0.9x3)

sin(2x)+cos(3x)

(ctg(x)+1)tgx

4

cos(x+0.1x2)

cos(x-0.8)+ x2

ln2(sin(1.2x))

sin(x)+cos(x)

5

|1.5x| + x2

1.1x+0.5x2

1.5+3.88(x2-1)

sin(x/2.1)-cos(x)

6

(1.2+x)/x2)

1.5x2-3x-1

cos(x)/(sin(x)+1)

sin(x-1)/2x

7

cos(x-1)/(sin(x)+2)

sin(1.9x)/(x-1.5)

cos(x+2x2)

sin(x)*cos(0.9x)

8

sin(2x)+cos(3x)

|0.99x| + x

1.5x2+x

sin(0.27x)-cos(x)

9

ln2(sin(1.2x))

(3.45x2+0.1)

sin(1.88x)cos(x)

cos(|x|)/(sin(x)+2)

10

1.5+3.88(x2-1)

cos3(x)+tg(x)

(x3-5) +x

sin(0.9x)+cos(x)

11

cos(x)/(sin(x)+1.5)

sin2(x/2 + 1)

sin2(x)/(1+tg(x))

x2+3x-5

12

cos(x+0.9x3)

(3.45x2)

(ctg(x)+1)tgx

sin(1.5x)+sin(x)

13

cos(x-0.8)+ x2

(x/2 + 1.5)(x+1)

sin(x)+cos(x)

sin((cos(x)+1.3))

14

|0.99x| + x

(x2+4)/sin(x)

cos(x+0.9x3)

(x-1.2)/2x

15

2x2+x-5

|x-4ln2|

cos(x-0.8)+ x2

x tg(x)/2

16

y=sin(t)

|x-1.1cos(x)|

1.1x+5x2

y=sin(t+1)

 

x=cos(t)

 

 

x=1.3t2

17

sin(2x)*cos(x)

x=cos(t)+1

1.5x2-3x-1

x=sin(t2)

 

 

y=sin2(x)

 

y=cos(2.1t+1.5)

18

sin(2.27x)-cos(x)

sin(1.88x)cos(x)

sin(1.9x)/(x-1.5)

cos(x+ ln2 )

19

cos(x)/sin(2x)

(x3-5) +x

x2+3x-0.9

cos(x-0.8)+ x2

20

sin(0.99x)+cos(x)

sin2(x)/(1+tg(x))

sin(1.5x)+sin(x)

1.1x+0.5x2

21

sin(2.5x)-cos(x2)

cos2(x)+tg(1.5x)

sin((cos(x)+1.3))

|ln2-x| + 1.5

22

sin(1.5x)+cos(x)

2(x+1)

cos(2x)+sin(3x)

(x5-5)

23

sin((cos(x)+1.3))

(sin(x)+1)/2

sin2(x/2 + 1)

1+2x-3x2

24

sin(t+1) x=2.123t

(x+3)2-sin2(x)

(3.45x2)

tg(x/2)+1

25

x=sin(t2)

x=sin(1+t)

sin(3x)-cos(x)

x=cos(1.4t2)

 

y=cos(2.1t)

y=cos(2.1t)

 

y=sin(2.1t)

26

|0.9x3|

sin2(x)/(1+tg3(x))

3x2+4x-5

cos2(x) + tg(2x)

---------------------------------------------------------------------------------------------------

© Лабораторная работа подготовлена Л.В. Илюшечкиной

5

Соседние файлы в папке 8_FPU
  • #
    16.04.2013220 б14ex.asm
  • #
    16.04.20131.83 Кб15graph.asm
  • #
    16.04.2013348.4 Кб19Lab8.pdf