Управляющие команды
Управляющие команды предназначены для работы с нечисловыми регистрами сопроцессора. Некоторые команды имеют альтернативные варианты. Мнемоники этих команд могут начинаться с FN или с F. Первый вариант соответствует командам "без ожидания". Для таких команд процессор не проверяет, занят ли сопроцессор выполнением команды, то есть бит занятости B не проверяется. Численные особые случаи также игнорируются.
Варианты команд "с ожиданием" действуют также, как и обычные команды сопроцессора.
Приведем список управляющих команд сопроцессора:
FNSTCW (FSTCW) Записать управляющее слово
FLDCW Загрузить управляющее слово
FNSTSW (FSTSW) Записать слово состояния
FNSTSW AX (FSTSW AX) Записать слово состояния в AX,
нет в сопроцессоре 8087
FNCLEX (FCLEX) Сбросить особые случаи
FNINIT (FINIT) Инициализировать сопроцессор
FNSTENV (FSTENV) Записать среду
FLDENV Загрузить среду
FNSAVE (FSAVE) Записать полное состояние
FRSTOR Восстановить полное состояние
FINCSTP Увеличить указатель стека на 1
FDECSTP Уменьшить указатель стека на 1
FFREE Освободить регистр
FNOP Холостая команда, нет операции
FSETPM Установить защищенный режим работы
Команда FNSTCW записывает содержимое управляющего регистра в оперативную память.
Команда FLDCW загружает управляющий регистр данными из оперативной памяти и обычно используется для изменения режима работы сопроцессора.
Команда FNSTSW записывает содержимое регистра состояния в оперативную память. Команда FNSTSW AX записывает содержимое этого регистра в регистр AX центрального процессора для его последующего анализа командами условных переходов.
Сопроцессор 8087 не имеет варианта команды FSTSW AX, поэтому приходится вначале записывать регистр состояния в память, а затем в регистр флагов процессора 8086.
Команда FNCLEX сбрасывает флаги особых случаев в регистре состояния сопроцессора. Кроме того, сбрасываются биты ES и B.
Команда FNINIT инициализирует регистр состояния, управляющий регистр и регистр тегов в соответствии со следующей таблицей:
Регистр | Режим работы |
Управляющий | Проективная бесконечность, округление к ближайшему, расширенная точность, все особые случаи замаскированы |
Состояния | B=0 (бит занятости сброшен), код условия не определен, ST=ES=0, флаги особых случаев установлены в нуль |
Тегов | Все поля регистра тегов содержат значение 11 (пустой регистр) |
Команда FNSTENV записывает в память содержимое всех регистров, кроме численных, в формате, показанном на рис. 10.18.
Рис. 10.18. Формат записи в память содержимого всех регистров командой FNSTENV
Команда FLDENV предназначена для загрузки регистров, сохраненных ранее командой FNSTENV. Обе эти команды полезны в программах обработки особых случаев.
Команды FNSAVE и FRSTOR действуют аналогично командам FNSTENV и FLDENV, но они дополнительно сохраняют и восстанавливают содержимое численных регистров. Формат области сохранения регистров, занимающей 94 байта, приведен на рис. 10.19.
Рис. 10.19. Формат записи в память содержимого всех регистров командами FNSAVE и FRSTOR
Команды FINCSTP и FDECSTP увеличивают и уменьшают на 1 указатель стека SP, соответственно.
Команда FFREE ST(i) помечает численный регистр ST(i) как пустой, записывая в соответствующее поле регистра тегов значение 11.
Команда FNOP не производит никаких действий.
Команда FSETPM переводит сопроцессор в защищенный режим работы.
- Аннотация
- Введение
- Благодарности
- Авторский компакт-диск
- Как связаться с авторами
- 1 Определение конфигурации компьютера
- Определение конфигурации с помощьюBios
- Наличие нмд
- Наличие арифметического сопроцессора
- Начальный режим работы видеоадаптера
- Стандартная оперативная память
- Расширенная оперативная память
- ПрограммаHdwcfg
- Код модели компьютера и версияBios
- ПрограммаBiosinfo
- Конфигурация в памяти cmos
- 00H - 0Dh - область часов реального времени
- 0Eh - байт диагностики
- 0Fh - байт отключения
- 10H - тип накопителей нгмд
- 11H - зарезервировано дляIbm pc/at, тип нмд дляIbm ps/2
- 12H - тип первого и второго нмд
- 13H - зарезервировано
- 14H - конфигурация оборудования
- 15H-16h - объем стандартной оперативной памяти
- ПрограммаCmosshow
- Определение типа центрального процессора
- МоделиIntel 8086/8088
- Модель Intel 80286
- МодельIntel 80386
- МодельIntel 80486
- Команда cpuid
- ПрограммаCpuinfo
- 2 Клавиатура
- Как работает клавиатура
- Клавиатурная матрица
- Скан-код клавиши
- КодAscii нажатой клавиши
- Режим автоповтора
- Типы клавиатур
- Порты для работы с клавиатурой
- КомпьютерIbm pc/xt
- Современные компьютеры
- ПрограммаKbdled
- Аппаратное прерывание клавиатуры
- Стандартный обработчик прерывания int 09h
- Буфер клавиатуры
- Переключающие клавиши
- Средства bios для работы с клавиатурой
- Чтение символа с ожиданием
- ПрограммаKbdscan
- Проверка буфера на наличие в нем символов
- ПрограммаChkbuf
- Получение состояния переключающих клавиш
- Установка временных характеристик клавиатуры
- Запись символов в буфер клавиатуры
- Чтение символа с ожиданием для 101-клавишной клавиатуры
- Проверка буфера на наличие в нем символов для 101-клавишной клавиатуры
- Получение состояния переключающих клавиш для 101-клавишной клавиатуры
- Режимы работы клавиатуры
- Сравнение режимов
- Изменение режима
- Средства ms-dos для работы с клавиатурой
- Буферизованный ввод с эхо-выводом
- Буферизованный ввод без эхо-вывода
- Нефильтрованный ввод без эхо-вывода
- Вводс консоли и вывод на консоль
- Ввод строки символов
- Проверка состояния стандартного ввода
- Сброс буфера клавиатуры
- Клавиатурные функции стандартной библиотеки c
- Функции getch и getche
- ПрограммаKbdascii
- Функцияkbhit
- ПрограммаKbdhit
- Функция cgets
- Функция gets
- Функция scanf
- Как устроена мышь?
- Драйверы мыши в ms-dos
- Прерывание для обслуживания мыши
- Инициализация мыши
- Включить курсор мыши
- Выключить курсор мыши
- ПрограммаMscursor
- Определить положение курсора
- ПрограммаMsgcurs
- Установить курсор
- Определить положение курсора при нажатии клавиши
- Определить положение курсора при отпускании клавиши
- Задать диапазон движения курсора по горизонтали
- Задать диапазон движения курсора по вертикали
- Задать форму курсора в графическом режиме
- ПрограммаMsgform
- Задать форму курсора в текстовом режиме
- ПрограммаMstform
- Определить содержимое счетчиков перемещения
- Установить драйвер событий
- ПрограммаMsdriver
- Включить эмуляцию светового пера
- Выключить эмуляцию светового пера
- Задать скорость перемещения курсора мыши
- Установить область исключения для курсора
- Задать увеличенный графический курсор
- Определить порог удвоения скорости
- Заменить драйвер событий
- Определить размер буфера состояния драйвера
- Сохранить состояние драйвера
- Восстановить состояние драйвера
- Установить альтернативный драйвер событий
- Получить адрес альтернативного драйвера событий
- Установить чувствительность мыши
- Определить чувствительность мыши
- Установить частоту прерываний для Inport Mouse
- Установить номер страницы видеопамяти
- Определить номер страницы видеопамяти
- Отключить драйвер мыши
- Восстановить драйвер мыши
- Сбросить драйвер мыши
- Определить тип мыши
- МышьMicrosoft IntelliMouse
- Проверка наличия мыши Microsoft IntelliMouse
- Проверка в среде Microsoft Windows 95 и Microsoft Windows nt версии 3.51
- Проверка в среде Microsoft Windows nt версии 4.0
- Определение величины свертки
- Определение величины свертки в среде Microsoft Windows 95 и Microsoft Windows nt версии 3.51
- Определение величины свертки в среде Microsoft Windows nt версии 4.0
- Сообщение msh_mousewheel
- Сообщение wm_mousewheel
- Другие сообщения от мыши Microsoft IntelliMouse
- ПриложениеRtfpad
- 4 Часы реального времени
- Регистры часов реального времени
- Регистры счетчиков
- Регистр состоянияA
- Регистр состояния b
- Регистр состояния c
- Регистр состояния d
- Прерывание от часов реального времени
- Функции прерыванияInt 1Ah
- Сброс будильника
- ПрограммаRtcalarm
- 5 Системный таймер
- Обработка прерываний таймера
- Микросхемы таймера 8253 и 8254
- Режимы работы таймера
- Режим однократного выполнения функций
- Работа с перезапуском
- Формат управляющего регистра
- Формат команды чтения слова состояния канала
- Формат слова состояния канала
- Последовательность действий
- ПрограммаTimerst
- Средства bios для работы с таймером
- Чтение счетчика таймера
- Установка счетчика таймера
- Установка таймера с сигнализацией
- Формирование задержки
- Второй способ проигрывания музыки
- Проигрывание музыки в фоновом режиме
- ПрограммаTmsound
- ПрограммаIosound
- ПрограммаRandom
- 6 Асинхронный последовательный адаптер
- Основные понятия и термины
- Аппаратная реализация
- МикросхемаUart
- Разъемы адаптера
- Порты асинхронного адаптера
- Порт 3f8h
- Порт 3f9h
- Порт 3fAh
- Порт 3fBh
- Порт 3fCh
- Порт 3fDh
- Порт 3fEh
- Функции bios для работы с последовательным асинхронным адаптером
- Инииализация портов асинхронного адаптера
- Передача байта
- Прием байта
- Определение состояния асинхронного адаптера
- Программирование асинхронного адаптера
- Инициализация асинхронного адаптера
- Передача данных
- Прием данных
- ПрограммаComtest
- Использование прерываний
- 7 Параллельный адаптер
- Порты параллельного адаптера
- Порт 378h
- Порт 37Ah
- Порт 379h
- Разъем параллельного адаптера
- Вывод байта на принтер через параллельный адаптер
- Функции bios для работы с принтером
- Печать символа
- Инициализация принтера
- Определение состояния принтера
- ПрограммаPrintfl
- Функции ms-dos для работы с принтером
- ФункцияMs-dos для вывода на принтер
- Система буферизованной печати
- Проверка установки системы буферизованной печати
- Запуск процесса печати файла
- Отмена печати файла
- Отмена печати всех файлов
- Определение состояния и блокировка системы буферизованной печати
- Разблокирование системы буферизованной печати
- Коды ошибок
- Программирование принтера
- Подключение принтера к компьютеру
- Установка переключателей конфигурации
- Программирование режимов работы принтера
- Инициализация принтера
- Контроллер прямого доступа ibm pc/xt
- Регистры каналов dma
- Порты 00h - 07h
- Порт 08h
- Порт 09h
- Порт 0Ah
- Порт 0Bh
- Порт 0Ch
- Порт 0Dh
- Порт 0Eh
- Порт 0Fh
- Порты 81h-8Fh
- Инициализация канала dma
- Контроллер прямого доступа ibm at
- Регистры каналовDma
- Регистры страниц
- Порты 0c0h - 0dFh
- Порты 0d0h-0dFh
- 9 Устройство чтения cd-rom
- Драйвер устройства чтенияCd-rom
- РасширениеMscdex
- ФункцииMscdex
- Определение количества устройствCd-rom
- Получение списка устройств cd-rom
- Получение имени файла прав собственности
- Получение имени файла резюме
- Получение имени файла библиографической документации
- Чтение сектора оглавления компакт-диска
- Чтение сектора по абсолютному адресу
- Проверка устройства чтения cd-rom
- Определение версии mscdex
- Определение обозначения устройств чтения cd-rom
- Вызов драйвера cd-rom
- Работа через драйверCd-rom
- Заголовок запроса
- Команды драйвера cd-rom
- Инициализация
- ЧтениеIoctl Input
- Определение адреса заголовка драйвера cd-rom
- Определение положения головки
- Получение информации о звуковых каналах
- Чтение данных из устройства
- Определение состояния устройства
- Определение размера сектора
- Определение размера тома
- Проверка замены носителя данных
- Получение информации о компакт-диске
- Получение информации о дорожкекомпакт-диска
- Получение информации о канале q
- Получение информации о подканале
- Получение штрих-кода изготовителя компакт-диска
- Сброс входных буферов
- ЗаписьIoctl Output
- Извлечение компакт-диска
- Блокирование и разблокирование компакт-диска в устройстве
- Сброс устройства чтения cd-rom
- Управление звуковыми каналами
- Запись в устройство управляющей строки
- Чтение длинное с предварительной выборкой
- Проигрывание звуковой дорожки
- Остановка проигрывания звуковой дорожки
- Возобновление проигрывания звуковой дорожки
- ПрограммаCdinfo
- ПрограммаCdplay
- 10 Арифметический сопроцессор
- Вещественные числа
- Целые числа
- Регистры сопроцессора
- Численные регистры
- Регистр тегов
- Регистр управления
- Регистр состояния
- Регистры указателя команды и указателя операнда
- Система команд сопроцессора
- Команды пересылки данных
- Запись в стек
- Извлечение из стека
- Копирование данных
- Загрузка констант
- Арифметические команды
- Команды сравнений чисел
- Трансцендентные команды
- Управляющие команды
- Программирование сопроцессора
- ПрограммаNpu1
- Обработка особых случаев
- Неточный результат
- Переполнение
- Антипереполнение
- Деление на нуль
- Недействительная операция
- Денормализованный операнд
- Ошибка в процессореPentium
- 11 Расширенная память
- Основные понятия
- Установка драйвера himem.Sys
- Спецификация xms
- Проверка подключения драйвера
- Получение адреса управляющей программы
- Описание функций драйвера himem.Sys
- Получить версию xms
- Запросить область hma
- Освободить область hma
- Глобальное открывание линии a20
- Глобальное закрывание линии a20
- Освободить блок emb
- Копирование блоков emb
- Блокирование emb
- Разблокирование emb
- Получить информацию об идентификаторе блока emb
- Изменить размер emb
- Запросить область umb
- Освободить область umb
- Коды ошибок
- Ограничения при использовании области hma
- Примеры программ
- ПрограммаTesthma
- ПрограммаCallhma
- Предметный указатель
- Литература
- Оглавление
- 1 Определение конфигурации компьютера 7
- 2 Клавиатура 38
- 3 Мышь 64
- 4 Часы реального времени 102
- 5 Системный таймер 113
- 6 Асинхронный последовательный адаптер 132
- 7 Параллельный адаптер 149
- 8 Контроллер прямого доступа к памяти 162
- 9 Устройство чтения cd-rom 170
- 10 Арифметический сопроцессор 216
- 11 Расширенная память 243