- •Содержание
- •1.Введение в архитектуру эвм. 5
- •2.Архитектура реального режима работы м/п семейства 8086 19
- •3.Директивы и операторы ассемблера 81
- •4.Архитектура и система команд арифметического сопроцессора 91
- •5.Варианты контрольных работ 131
- •6.Примеры программ 138
- •1.Введение в архитектуру эвм.
- •2.Архитектура реального режима работы м/п семейства 8086
- •2.1.Форматы данных микропроцессора
- •2.1.1.Числа
- •2.1.2.Символы
- •2.1.3.Указатели
- •2.1.4.Цепочки
- •2.2.Адресация памяти
- •2.3.Внутренние регистры процессора
- •2.3.1.Регистры общего назначения
- •2.3.2.Сегментные регистры
- •2.3.3.Регистры смещения
- •2.3.4.Регистр флагов
- •2.4.Режимы адресации
- •2.4.5.Базовая адресация
- •2.5.1.1. Общие команды.
- •2.5.1.2. Команды push и pop .
- •2.5.1.3. Команды ввода-вывода.
- •2.5.1.4. Адресные команды (пересылки адреса)
- •2.5.1.5. Флажковые команды (команды пересылки флагов).
- •2.5.2.Арифметические команды.
- •2.5.2.1. Команды сложения.
- •2.5.2.2.Команды вычитания.
- •2.5.2.3.Команды умножения и деления.
- •2.5.2.4.Команды расширения знака.
- •2.5.2.5.Десятичная арифметика.
- •2.5.3.Логические команды.
- •2.5.3.1.Булевы команды.
- •2.5.3.2.Команды сдвигов.
- •2.5.3.3.Команды циклических сдвигов.
- •2.5.3.4.Команды двойного сдвига
- •2.5.3.5.Команды работы с двоичными цепочками
- •2.5.4.Команды передачи управления.
- •2.5.4.1.Команды безусловной передачи управления.
- •2.5.4.2. Команды условных переходов.
- •2.5.4.3.Команды SetCondition
- •2.5.5.Цепочечные (строковые) команды.
- •2.5.5.1.Команды пересылки цепочки.
- •2.5.5.2.Команды сравнения цепочек.
- •2.5.5.3.Команды сканирования цепочек.
- •2.5.5.4.Команды загрузки.
- •2.5.5.5.Команды ввода и вывода цепочек.
- •2.5.5.6.Замена сегмента.
- •2.5.6.Команды управления микропроцессором.
- •2.5.6.1.Команды управления флагами.
- •2.5.6.2.Команды синхронизации.
- •2.5.6.3.Команда холостого хода.
- •2.5.6.4.Команды прерываний.
- •2.5.7.Новые команды микропроцессора 80486
- •3.Директивы и операторы ассемблера
- •3.1.Структура программы
- •3.2.Организация программы.
- •3.2.1. Модели памяти
- •3.2.2. Процедуры
- •3.2.3. Директивы задания набора допустимых команд
- •3.3.Примеры использования директив в программах типа .Exe и .Com.
- •4.Архитектура и система команд арифметического сопроцессора
- •4.1.Форматы чисел сопроцессора
- •4.1.1.`Целые числа
- •4.1.2. Вещественные числа
- •4.1.3.Диапазоны вещественных чисел в х87.
- •4.2.Особые случаи вещественной арифметики
- •4.3.Формирование специальных значений в особых случаях
- •4.3.1. Случай неточного результата.
- •4.3.2.Численное антипереполнение.
- •4.3.3. Денормализованный операнд.
- •4.3.4. Деление на ноль.
- •4.3.5.Численное переполнение.
- •4.3.6.Недействительная операция.
- •4.4.Регистры математического сопроцессора.
- •4.4.1.Численные регистры (регистровый стек).
- •4.4.2.Регистр управления (cw)
- •4.4.3.Регистр состояния.
- •4.4.4. Регистр тэгов (признаков).
- •4.4.5.Указатели особого случая.
- •4.5.Система команд арифметического сопроцессора.
- •4.5.1.Команды передачи данных.
- •4.5.2.Арифметические команды
- •4.5.3.Дополнительные арифметические команды
- •4.5.4.Команды сравнений
- •4.5.5.Трансцендентные команды
- •4.5.6.Административные команды
- •4.6.Совместная работа двух процессоров в системе.
- •4.6.1.Синхронизация по командам.
- •4.6.2.Синхронизация по данным.
- •5.Варианты контрольных работ
- •5.1.Контрольная работа №1
- •5.2. Контрольная работа №2
- •6.Примеры программ
- •Список рекомендуемой литературы
4.5.5.Трансцендентные команды
МНЕМОНИКА |
ОПИСАНИЕ |
FPTAN |
Частичный tg |
FPATAN |
Частичный arctg |
FYL2X |
y*log2(x) |
FYL2XP1 |
y*log2(x) |
F2XM1 |
2x-1 |
FPTANдает в качестве результата два таких числа х и у, что у/х=tg(ST(0)). У - заменяет старое содержимоеST(0), а х включается сверху.
Для модели математического сопроцессора 80287 аргумент команды FPTANдолжен быть нормализован; денормализованные и ненормализованные числа, бесконечность и нечисла недопустимы в качестве аргументов у всех трансцендентных команд. Кроме того, аргумент должен находиться в диапазоне 0<ST(0)</4. Если аргумент недопустим или находится вне диапазона,FPTANдает неправильный результат, не сигнализируя об особом случае (то же самое верно и для других трансцендентных команд). Программист сам должен заботится о допустимости аргумента и приведении его в диапазон. Допустимость может быть проверена с помощью командыFXAM. Для модели математического сопроцессора 80387 и устройствFPUкомандаFPTANвST(1) возвращает тангенс исходного угла, а вST(0) возвращается единица. Сделано так из-за совместимости с сопроцессором 80287.
FPATAN - вычисляет ST(0)=arctg (ST(1)/ST(0)). Два верхних элемента извлекаются из стека, результат включается в стек. Упрощает вычисление остальных тригонометрических функций. Для аргументов должно выполняться следующее условие: 0<ST(1)<ST(0)<для модели математического сопроцессора 80287, с модели математического сопроцессора 80387 ограничений на аргумент нет.
FYL2X - вычисляет функцию ST(0) = ST(1)*log2ST(0). Два операнда извлекаются из стека, а затем результат включается в стек. Условие для аргументовST(0) > 0 должно быть выполнено.
FYL2XP1 - вычисляет функцию ST(0) = ST(1)*log2(ST(0)+1). Должно быть выполнено следующее условие: . Причина появления этой команды - более высокая точность вычисления функцииlog2(1+x) при малых х. Удобна для вычисления обратных гиперболических функций.
F2XM1 вычисляетST(0) = 2ST(0)-1, причемST(0) должно находиться в диапазоне: 0 <ST(0) < 0.5 модели математического сопроцессора 80287. Для модели математического сопроцессора 80387 и устройствFPUусловие для аргумента функции -1 <ST(0) < +1. Вычисление 2х-1 вместо 2хпозволяет избежать потери точности, при х близких к нулю (при этом 2хблизко к 1). Удобна для вычисления гиперболических функций.
Новые трансцендентные команды
Для модели математического сопроцессора 80387 были разработаны новые трансцендентные команды:
FSIN- без операндов. Вычисляет синус действительного числа из вершины стека, результат записывается в вершину стека. Для величины угла нет ограничений.
FSINCOS- без операндов. Одновременно вычисляет синус и косинус угла в вершине стека. Синус - вST(1), косинус- вST(0). Ограничений величины угла нет.
FCOS- без операндов. Вычисляет косинус действительного числа из вершины стека. Результат помещается в новую вершину стека. Ограничений величины угла нет.
4.5.6.Административные команды
Эта группа команд обеспечивает управление режимом работы сопроцессора. Для программиста особенно интересны команды работы с регистрами управления и состояния.
МНЕМОНИКА |
ОПИСАНИЕ КОМАНДЫ |
FNSTCW(FSTCW) |
Запомнить регистр управления |
FLDCW |
Загрузить регистр управления |
FNSTSW(FSTSW) |
Запомнить регистр состояния |
FNSTSW AX(FSTSW AX) |
Запомнить регистр состояния в АХ |
FNCLEX(FCLEX) |
Сбросить особые случаи |
FNINIT(FINIT) |
Инициализировать сопроцессор |
FNSTENV(FSTENV) |
Запомнить среду |
FLDENV |
Загрузить среду |
FNSAVE(FSAVE) |
Запомнить полное состояние |
FRSTOR |
Восстановить полное состояние |
FINCSTP |
INC указателя стека |
FDECSTP |
DEC указателя стека |
FFREE |
Освободить регистр |
FNOP |
Нет операции FWAIT - ожидание |
FSETPM |
Установить защищенный режим |
FENI(FNENI) |
Разрешить прерывания (IEM = 0) |
FDISI(FNDISI) |
Запретить прерывания (IEM = 1) |
FNSTCW(FSTCW) - содержимое регистра управления записывается в ячейку памяти, указанную в качестве операнда.
FLDCW- загружает регистр управления из ячейки памяти, указанной в качестве операнда.
Эти команды применяются для изменения режима работы сопроцессора (можно переопределять режим округления, управления бесконечностью, маскирование особых случаев).
FNSTSW(FSTSW) - передает содержимое регистра состояния в ячейку памяти, указанную в качестве операнда.FNSTSWAX(FSTSWAX) передает содержимое регистра состояния в регистр АХ основного процессора.
FNCLEX(FCLEX) - сбрасывает (устанавливает в нуль) флажки всех особых случаев и битыESиBв регистре состояния.
FNINIT(FINIT) - инициализирует регистры : управления, состояния и тэгов (такое же действие производит аппаратный сигнал сброса):
Регистр управления :
режим управления бесконечностью – для модели математического сопроцессора 80287 – проективный, для последующих моделей - аффинный;
режим округления - округление к ближайшему числу;
режим точности - расширенная точность;
все особые случаи - замаскированы (то есть формируются специальные значения).
Регистр состояния :
a) В = 0 (не занят)
b)C0C1C2C3- не определены
c) ST = 0
d) ES = 0
e) флаги особых случаев = 0
Все тэги = 11 (“пустые”)
FNSTENV(FSTENV) - записывает в память содержимое регистров управления, состояния, тэгов и указателей особого случая, начиная с адреса указателя в операнде. Формат информации в памяти следующий :
15 бит |
0 бит |
| |
Регистр управления |
0 (смещение от начала) | ||
Регистр состояния |
2 | ||
Регистр тэгов |
4 | ||
Указатель команды |
6 | ||
Указатель операнда |
10 старший адрес |
FLDENV- загружает среду, ранее запомненнуюFNSTENV. Эти команды применяются в процедурах обработки особых случаев, чтобы получить доступ к указателям особого случая.
FNSAVE(FSAVE) действует аналогичноFNSTENV, но дополнительно сохраняет в памяти содержимое численных регистров, располагая их после указателя операнда :
Смещение от
начала буфера
Всего в
память передается 94 байта (или 108, если
387 процессор После
выполнения команды сопроцессор
переходит в нач. сост. как после FINIT |
14 |
ST(1) |
24 |
ST(2) |
34 |
ST(3) |
44 |
ST(4) |
54 |
ST(5) |
64 |
ST(6) |
74 |
ST(7) |
84 |
FRSTORвосстанавливает все регистры сопроцессора из памяти. Эта команды в основном применяется для переключения задач ( в защищенном режиме). Обратная ей – командаFSAVE.
FINCSTPиFDECSTP- осуществляют инкремент или декремент указателя стека. Не влияют на регистр тэгов и численные регистры, не эквивалентны командам извлечения или включения в стек.
FFREEST(i) - устанавливают тэг регистраST(i) в состояние “пустой” (11), но содержание численного регистра не изменяют.
FNOP- не производит никакой операции, действует какFSTST(0),ST(0).
FENIиFDISI- не используются с сопроцессора 80387.
FSETPM- переводит сопроцессор в защищенный режим.
Аппаратный сброс переводит основной процессор и сопроцессор в реальный режим. Команды с мнемоникой FNXXXне проверяют незамаскированные особые случаи (если прерывания разрешены) и выполняется немедленно. В таком случае ассемблер автоматически не вставляет перед ней командуFWAIT, то есть не проверяет наличия особого случая сопроцессора. Все остальные команды синхронизируются автоматически.