- •Введение
- •1. Архитектура процессора 8086
- •1.1. Регистры процессора.
- •1.2. Сегменты.
- •1.3. Режимы адресации.
- •1.4. Стеки.
- •1.5. Прерывания.
- •2. Архитектура арифметического сопроцессора.
- •2.1. Типы данных fpu.
- •2.2. Регистры fpu
- •2.3. Исключения fpu
- •3. Система команд
- •4. Программирование на ассемблере
- •4.1 Общие сведения
- •5. Описание лабораторных работ
- •5.1. Требования к выполнению лабораторных работ.
- •5.2 Лабораторная работа № 1. Первая программа на ассемблере.
- •5.3. Лабораторная работа n2. Работа со структурами данных и функциями bioSиDos.
- •5.4. Лабораторная работа n3 по эвм. Управление устройствами.
- •5.5. Лабораторная работа n4 по эвм. Макросы, блоки повторений.
- •5.6. Лабораторная работа № 5. Управление виртуальной памятью
- •5.7 Лабораторная работа № 6 Оптимизация работы с внешним накопителем
- •5.8 Лабораторная работа № 7. Связь программ на языке высокого уровня и языке ассемблера.
- •5.9. Лабораторная работа № 8. Работа с портами coMиLpt
- •5.10. Лабораторная работа № 9. Вычисления с использованием сопроцессора плавающей арифметики.
- •6. Рекомендуемая литература
- •Приложение 1.
2.3. Исключения fpu
При выполнении команд FPU могут возникать шесть типов особых ситуаций, называемых исключениями. При возникновении исключения соответствующий флаг в регистре SR устанавливается в 1 и, если маска этого исключения в регистре CR не установлена, вызывается обычное прерывание INT 10h (если бит NE в регистре центрального а CR0 установлен в 1) или IRQ13 (INT 75h), обработчик которого может прочитать регистр SR, чтобы определить тип исключения (и FIP, и FDP) и команду, которая его вызвала, а затем попытаться исправить ситуацию. Если бит маски наступившего исключения в регистре CR установлен в 1, выполняются следующие действия по умолчанию
неточный результатрезультат округляется в соответствии с битами RC (на самом деле это исключение происходит очень часто. Например дробь 1/6 не может быть представлена точно десятичным вещественным числом любой точности и округляется). При этом флаг С1 показывает, в какую сторону произошло округление 0 – вниз, 1 – вверх;
антипереполнениерезультат слишком мал, чтобы быть представленным обычным числом, – он преобразуется в денормализованное число;
переполнениерезультат преобразуется в бесконечность соответствующего знака;
деление на нольрезультат преобразуется в бесконечность соответствующего знака (учитывается и знак нуля);
денормализованный операндвычисление продолжается, как обычно;
недействительная операциярезультат определяется из таблицы 12.
Таблица 12. Результаты операций, приводящих к исключениям
Операция |
Результат |
Ошибка стека |
Неопределенность |
Операция с неподдерживаемым числом |
Неопределенность |
Операция с SNAN |
QNAN |
Сравнение числа с NAN |
C0 = C2 = C3 = 1 |
Сложение бесконечностей с одним знаком или вычитание – с разным |
Неопределенность |
Умножение нуля на бесконечность |
Неопределенность |
Деление бесконечности на бесконечность или 0/0 |
Неопределенность |
Команды FPREM и FPREM1, если делитель – 0 или делимое – бесконечность |
Неопределенность и C2 = 0 |
Тригонометрическая операция над бесконечностью |
Неопределенность и C2 = 0 |
Корень или логарифм, если x < 0, log(x+1), если x < -1 |
Неопределенность |
FBSTP, если регистр-SRS пуст, содержит NAN, бесконечность или превышает 18 десятичных знаков |
Десятичная неопределенность |
FXCH, если один из операндов пуст |
Неопределенность |
3. Система команд
В таблице П1. приложения 1 приведено описание команд процессора 8086. Заметим, что остальные процессоры семейства 80х86 совместимы с 8086 программно, поэтому приведенный набор команд можно считать базовым для любого из процессоров семейства.Каждая запись таблице содержит информацию о том, какие признаки из регистра FLAGS процессора 8088 и как изменяются, при этом приняты следующие обозначения признаков: ? – неопределен после операции; * – изменился в зависимости от результатов выполнения команды; 0 - всегда сброшен; 1 - всегда установлен.
Указание регистра в круглых скобках означает ссылку на ячейку памяти, определяемую содержимым регистра.
В таблице П2 приложения 2 приведено описание команд арифметического сопроцессора. Каждая запись в таблице содержит указание на тип процессора, в котором реализована данная команда.