Курсовая работа: Эмуляция команды математического сопроцессора FSUB
Процесс обработки информации приближен к процессам, проводимым в математическом сопроцессоре Intel 80x87. В программе на диалоговом уровне реализована возможность задания числового значения, которое нужно будет вычесть из вершиной стека эмулированного математического сопроцессора, и вычитание разных элементов стека. В том числе и идущих не по порядку. В процессе работы эмуляции сопроцессора часто необходимо быстрое обращение к битам отдельного числа для этого используется следующая структура bits, представленная в таблице 2.1
Таблица 2.1
тип | имя переменной | размер(бит) |
unsigned char | b0 | 1 |
unsigned char | b1 | 1 |
unsigned char | b2 | 1 |
unsigned char | b3 | 1 |
unsigned char | b4 | 1 |
unsigned char | b5 | 1 |
unsigned char | b6 | 1 |
unsigned char | b7 | 1 |
Структура bits объединенa в структур bait_tabс полями в таблице 2.2
Таблица 2.2
тип | название |
bits | bit |
unsigned char | bait |
Определим структуры для мантиссы и порядка:
Структура ud16 с полями в таблице 2.3
Таблица 2.3
тип | название |
bait_tab | data[2] |
short | val |
Структура ud64 с полями в таблице 2.4
Таблица 2.4
тип | название |
bait_tab | data[8] |
_int64 | val |
Структура ud80 с полями в таблице 2.5
Таблица 2.5
тип | название |
ud64 | mant |
ud16 | exp |
В самом же сопроцессоре стековые регистры имеют вид структуры str с полями, преставленной в таблице 2.6
Таблица 2.6
типа | название |
bait_tab | data[10] |
ud80 | val |
Также в программе определены регистры состояния, тегов и контроля.
Структура regs представлена в таблице 2.7
Таблица 2.7
тип | имя переменной | размер(бит) |
unsigned | IE | 1 |
unsigned | DE | 1 |
unsigned | ZE | 1 |
unsigned | OE | 1 |
unsigned | UE | 1 |
unsigned | PE | 1 |
unsigned | SF | 1 |
unsigned | ES | 1 |
unsigned | C0 | 1 |
unsigned | C1 | 1 |
unsigned | C2 | 1 |
unsigned | TOP | 3 |
unsigned | C3 | 1 |
unsigned | B | 1 |
Структура _sreg с полями в таблице 2.8
Таблица 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.