Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мпс с 1 по 294.doc
Скачиваний:
13
Добавлен:
16.04.2019
Размер:
6.2 Mб
Скачать

2.4.7. Команды управления fpu

В эту группу включены системные команды, определяющие режим функционирования FPU (табл. 2.38). Отметим, что многие системные команды: FINIT/FNINIT, FSTSW/FNSTSW, FSTCW/FNSTCW, FCLEX/FNCLEX, FSTENV/FNSTENV, FSAVE/FNSAVE - имеют две моди­фикации: с обычным для команд FPU префиксом F или префиксом FN.

При выборке команды с префиксом F проверяются значения признаков в регистре FPSR и реализуется обработка соответствующих исключений FPU, если в этом регистре уста­новлены единичные значения признаков, не маскируемые содержимым регистра FPCR. После обработки исключений выполняется поступившая команда. Если команда имеет префикс FN, то она выполняется без проверки и обработки исключений.

Таблица 2.38

Команды инициализации FINIT/FNINT устанавливают регистры FPU в начальное состо­яние. При этом для всех арифметических регистров FPU значения тегов в регистре TW принимают значение tag = 11 (регистры пустые); все биты регистра FPSR принимают нуле­вые значения. В регистре управления FPCR устанавливаются значения полей RC = 00 (округление к ближайшему), PC = 11 (расширенная точность, формат РТ), биты маски РМ, DM, OM.ZM, DM, IM = 1 (прерывания замаскированы), бит 12 принимает значение «О», ос­тальные биты принимают произвольное значение (не определены). Аналогичное состоя­ние регистров FPU устанавливается при поступлении внешнего сигнала сброса RESET.

Команды FSTSW/ FNSTSW осуществляют запись содержимого регистра FPSR в регистр АХ или 16-разрядную ячейку памяти m2byte, адресованную в команде процессора. Если после команд FSTSW АХ или FNSTSW AX выполнить команду FSAHF, то биты условий СО, С2, СЗ регистра FPSR замещают определенные флаги в регистре EFLAGS: СО оказывает­ся на месте CF, C2 - на месте PF, СЗ - на месте ZF. Используя затем команды условных переходов, можно управлять ходом выполнения программы в зависимости от значений битов условий FPU, поступивших в регистр EFLAGS.

Команда FLDCW загружает в регистр управления FPCR содержимое адресуемой ячейки памяти, команды FSTCW/FNSTCW пересылают содержимое этого регистра в память. Дан­ные команды используются для изменения режима работы FPU: маскирования определенных флагов, перемены способа округления и точности представления результата.

Команды FCLEX/FNCLEX сбрасывают в состояние «О» признаки ES, SF, РЕ, UE, ОЕ, ZE, DE, IE в регистре FPSR, а так же бит В. Значение поля ТОР и кодов условий СО-СЗ в этом регистре сохраняются неизменными.

Команды FSTENV/FNSTENV, FLDENV, FSAVE, FRSTOR используются для пересылки содержимого регистров FPU в память и обратно. Обычно эти процедуры используются при переключении задач, и адресуемым сегментом служит SS (сегмент стека). При выполне­нии команд FSTENV/FNSTENV производится запись в память содержимого регистров FPSR, FPCR, TW, FIP, FDP. Команда FLDENV загружает содержимое этих регистров из памяти, начиная с указанной в команде ячейки памяти. Размещение содержимого регистров FPU в памяти для этих команд показано на рис. 2.19 и 2.20, где Ах - адрес младшего байта содержимого регистра FPCR, который задается операндом m14byte или m28byte. Когда процессор работает в реальном режиме или в режиме виртуального 8086, регистры FIP, FDP содержат 20-разрядный физический адрес команды и операнда. При работе в защи­щенном режиме в этих регистрах хранятся относительный адрес (содержимое EIP и эф­фективный адрес ЕА) и селекторы (содержимое соответствующих сегментных регистров). Объем памяти, используемой при выполнении команд FSTENV, FLDENV, составляет 14 байт при 16-разрядной адресации и 28 байт при 32-разрядной),сть байтов не используется).

Команды FSAVE/FNSAVE дополнительно пересылают в память содержимое всех вось­ми 80-разрядных арифметических регистров, которое располагается после содержимого регистра FDP (рис. 2.19, 2.20), начиная с содержимого вершины стека ST(0). Используе­мый объем памяти при этом возрастает на 80 байт по сравнению с командами FSTENV/ FNSTENV. Команда FRSTOR восстанавливает содержимое всех регистров FPU, загружая его из памяти.

После выполнения команд FSTENV/FNSTENV, FSAVE/FNSAVE, содержимое регистров FPU принимает такое же значение, как после команд FINIT/FN1NIT.

Команды FINCSTP и FDECSTP увеличивают и уменьшают на единицу значение поля ТОР в регистре FPSR, меняя, таким образом, физический номер регистра ST(0) - вершины стека (см. рис. 2.16). При этом содержимое регистров данных и значения полей tag в реги­стре TW не изменяются.

Команда FFREE освобождает адресуемый регистр ST(i), устанавливая для него в регис­тре TW значение поля tag i = 11 (пустой).

Команда FNOP не выполняет каких-либо операций. Поступление команды WAIT(FWAIT) также не реализует каких-либо операций. Однако эта команда проверяет значения призна­ков в регистре FPSR и реализует обработку соответствующих исключений FPU, если уста­новлены единичные значения немаскированных признаков, аналогично тому, как это вы­полняют системные команды с префиксом F

CИСТЕМА КОМАНД: ОПЕРАЦИИ ММХ

В процессорах Pentium был впервые введен блок, предназначенный для обработки данных по принципу SIMD (Single Instruction Multiple Data: Одна Команда - Много Данных). Реализация этого принципа позволяет при помощи одной команды обработать несколько единиц однотипной информации. Такая технология обработки данных получила название ММХ (Multi-Media Extension) - «мультимедийное расширение», так как она позволяет суще­ственно повысить скорость выполнения операций преобразования изображений и звуко­вых сигналов. Процессоры, поддерживающие технологию ММХ, имеют расширенный набор команд, обрабатывающих данные, представленные в форматах упакованных чисел. В про­цессоре Pentium 111 метод обработки данных по принципу SIMD получил дальнейшее разви­тие. Расширенные возможности процессора Pentium III объединены под термином Streaming SIMD Extension (SSE) - «потоковое SIMD-расширение». В этих процессорах реализована технология SSE, обеспечивающая обработку потока данных, представленных в формате с плавающей точкой, по принципу SIMD. Кроме того, в процессорах Pentium III введены до­полнительные команды, расширяющие возможности ММХ-технологии. Современные моде­ли процессоров семейства Р6 поддерживают технологии ММХ и SSE. Чтобы определить, реализует ли данный процессор технологию ММХ и расширение SSE, следует воспользо­ваться командой CPUID.

Ниже дается перечень ММХ-команд, разбитых по функциональным группам. Команды, помеченные символом*, выполняются только процессорами, реализующими SSE-расширение.

Команды пересылки данных

MOVD - Пересылка 32-разрядных данных MOVQ - Пересылка 64-разрядных данных

PEXTRW- Пересылка слова из ММХ-регистра в регистр общего назначения PINSRW Пересылка слова из регистра общего назначения в ММХ-регистр PMOVMSKB Пересылка знаковых битов из ММХ-регистра в регистр общего назначения EMMS - Пересылка числа FFFFh в регистр тегов TW (освобождение ММХ-регистров)