Смекни!
smekni.com

Эмуляция команды математического сопроцессора FSUB (стр. 3 из 4)

Таблица 2.8

тип

название

regs

data

unsigned short int

sreg

Структура _creg, включает в себя следующую структуру:

Таблица 2.9

тип

имя переменной

размер(бит)

unsigned

IM

1

unsigned

DM

1

unsigned

ZM

1

unsigned

OM

1

unsigned

UM

1

unsigned

PM

1

unsigned

PC

2

unsigned

RC

2


Таблица 2.10

тип

название

unsigned short int

creg

Структура _twr, включает в себя следующую структуру:

Таблица 2.11

тип

имя переменной

размер(бит)

unsigned char

pr0

2

структура _twr с полями в таблице 2.12

Таблица 2.12

типа

название

unsigned short int

twr

2.2 Выбор методов решения задачи и разработка основных алгоритмов предметной области

Для вычитания двух стековых регистров, приводим порядок к одному значению и вычитаем мантиссы. Далее если необходимо производим нормализацию. Если в результате произошло переполнение мантиссы или порядка, устанавливаем флаги и возвращаем 0.

2.3 Построение структурной схемы программного продукта

Для работы программы необходимы следующие функции:

int main() – главная функция программы в ней вызываеться функция инициализации, заполнение стека сопроцессора, а также в диалоговом режиме вызываеться FSUB.

int fld(str reg[],_sreg &sreg,_creg creg,_twr twr,int st0 ,int stimm)– заполнение стека сопроцессора.

int print_st(str reg[],_sreg sreg,_creg creg,_twr twr, int id)– печатает 1-й элемент стека сопроцессора.

int fsub(str reg[],_sreg &sreg,_creg creg,_twr twr,int fl, int s1,int s2)– функция выполняющаяя сложение двух стековых регистров и выталкивает вершину стека.

Структурная схема программного продукта:

Рис.1. Структурная схема программного продукта


3. Описание реализации программного продукта

3.1 Описание программы эмуляции команды FSUB математического сопроцессора

В функции void main(), с которой начинается выполнение программы, производится инициализация эмулятора сопроцессора, заполнение стека первоначальными значениями, после этого предлагается в диалоговом режиме ввести значение:

1 - fsub

2 - fsub n

3 - fsub st(n), st(n)

4 - fld

0 - выход

В случае если пользователь введет 1, программа вычтет из вершины стека значение, находящееся на следующей позиции, 2 – вычтет из вершины стека переменную, введенную пользователем, 3 – произведет вычитание указанных пользователем значений стека, 4 – поместит на вершину стека новое значение.

3.2 Описание функции FSUB

Логика работы функции представлена блок-схемой на рис.3.1.


Рис.3.1. Лист 1


Рис.3.1. Лист 2

3.3 Описание функции FLD

Логика работы функции представлена блок-схемой на рис.3.2.


Рис.3.2. Лист 1


Рис.3.2. Лист 2

3.4 Описание функции Print_st

Логика работы функции представлена блок-схемой на рис.3.3.


Рис.3.3. Лист 1


4. Тестирование программы

4.1 Выбор стратегии тестирования и разработка тестов

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

План тестирования:

1. Вычтем регистры st0 и st1 командой fsub

2. Вычтем регистр st0 и переменную n командой fsub n

3. Вычтем регистры st1 и st5 командой fsub st1, st5

4. Вычтем регистры st0 и st2 командой fsub st0, st2

5. Вычтем регистры st0 и st3 командой fsub st0, st3

6. Вычтем регистры st0 и st6 командой fsub st0, st6

7. Вычтем регистры st0 и st7 командой fsub st0, st7

8. Вычтем регистры st0 и st7 командой fsub st0, st4

Результаты тестов: Перед тестированием.

twr =98B; swr =E; cwr =D

Таблица 4.1

Название регистра

Мантисса

Порядок

St0

5,54

2

St1

4,562

3

St2

денормализованый операнд

0

St3

0

0

St4

бесконечность

0

St5

1,12

1

St6

нечисло

0

St7

пусто

0


После 1 теста ( fsub) регистры не изменяются.

Таблица 4.2

Название регистра

Мантисса

Порядок

St0

-4,008

3

St1

4,562

3

St2

денормализованый операнд

0

St3

0

0

St4

бесконечность

5

St5

1,12

1

St6

нечисло

0

St7

пусто

0

После 2 теста ( fsub n, n = -5000,52), регистры не изменяются.

Таблица 4.3

Название регистра

Мантисса

Порядок

St0

9,9252

2

St1

4,562

3

St2

денормализованый операнд

0

St3

0

0

St4

бесконечность

5

St5

1,12

1

St6

нечисло

0

St7

пусто

0

После 3 теста ( fsub st1, st5), регистры не изменяются.

Таблица 4.4

Название регистра

Мантисса

Порядок

St0

8,7952

2

St1

4,562

3

St2

денормализованый операнд

0

St3

0

0

St4

бесконечность

5

St5

1,12

1

St6

нечисло

0

St7

пусто

0

После 4 теста ( fsub st0, st2).

twr =98B

swr =400E (флаг IE = 1, DE = 1)

cwr =D

Таблица 4.5

Название регистра

Мантисса

Порядок

St0

8,7952

2

St1

4,562

3

St2

денормализованый операнд

0

St3

0

0

St4

бесконечность

5

St5

1,12

1

St6

нечисло

0

St7

пусто

0

После 5 теста ( fsub st0, st3), регистры неизменны.