Научная литература
booksshare.net -> Добавить материал -> Физика -> Александров Е.К. -> "Микропроцессорные системы" -> 71

Микропроцессорные системы - Александров Е.К.

Александров Е.К., Грушвицкий Р.И., Купрянов М.С., Мартынов О.Е. Микропроцессорные системы — Спб.: Политехника, 2002. — 935 c.
ISBN 5-7325-0516-4
Скачать (прямая ссылка): mikroprocessorniesistemi2002.djvu
Предыдущая << 1 .. 65 66 67 68 69 70 < 71 > 72 73 74 75 76 77 .. 528 >> Следующая

Команды загрузки FLD, FILD, FBLD служат для передачи данных (вещественных
чисел - real, целых чисел - int. двоично-десятичных чисел - bed) в ST(0)
- верхний регистр арифметического стека FPU. Перед загрузкой производится
декремент содержимого поля ТОР в регистре состояния FPSR, т. е. вершина
стека перемещается на один регистр вверх. При этом проверяется значение
тега для регистра, ставшего новой вершиной стека. Если для него значение
tag = 11, т. е. этот регистр пустой, то производится его загрузка из
адресуемой ячейки памяти или регистра ST(i), номер которого i указан в
байте MODR/M команды. После загрузки в поле tag устанавливается код,
соответствующий значению поступившего числа. Отметим, что регистр ST(i)
после выполнения команды увеличивает свой номер на единицу, как и все
остальные регистры арифметического стека. Если значение tag = 11, т. е.
регистр не пустой, то устанавливается флаг 1Е=1 в регистре FPSR,
указывающий на выполнение недействительной операции. Если этот флаг не
маскирован, т. е. в регистре FPCR бит маски IM = 0, то загрузка не
производится, и реализуется исключение типа #MF ("ошибка FPU").
Загружаемые числа, принимаемые в форматах ОТ, ДТ (команда FLD), ЦС, КС,
ДЦ (команда FILD), DD (команда FBLD), заносятся в арифметический стек в
формате РТ.
Команды записи в память FST, FIST используются для передачи содержимого
ST(0) в память с преобразованием данных из внутреннего формата РТ в ОТ,
ДТ или ЦС, КЦ. При этом значение поля ТОР в регистре FPSR не меняется, т.
е. состояние стека сохраняется. Команда FST позволяет также переписать
содержимое ST(0) в любой другой регистр стека ST(i).
Команды записи с выталкиванием из стека FSTP, FISTP, FBSTP после передачи
содержимого осуществляют инкремент значения ТОР в регистре FPSR. Таким
образом, вершина арифметического стека перемещается на один регистр вниз.
Для регистра ST(0), служившего старой вершиной стека, устанавливается
значение tag = 11 (пусто), т. е. он освобождается. Отметим, что регистр
ST(i) после команды FSTP также уменьшает свой номер i на единицу, как и
остальные регистры стека. Если в этой команде задать ST(i) = ST(0), то
выполняется сокращение заполненного стека без сохранения содержимого
вершины. В соответствии с кодом команды выбираемые из стека числа
преобразуются из формата РТ в форматы ОТ, ДТ (команда FSTP), ЦС, КЦ, ДЦ
(команда FISTP), ДД (команда FBSTP). При этом производится округление
чисел в соответствии со значением поля RC в регистре FPSR. Исключение
составляет команда FBSTP, которая независимо от значения RC осуществляет
округление путем прибавления числа 0,5 и отбрасывания дробной части.
СИСТЕМА КОМАНД ОПЕРАЦИИ НАД ЧИСЛАМИ С ПЛАВАЮЩЕЙ ТОЧКОЙ
Таблица 2.28
Команды пересылки данных FPU
Синтаксис команды Операция
FLD m(32,64,80) real m(32,64,80) -> ST(0)
ST(i) ST(i) -> ST(0)
FILD m(16,32,64)int m(16,32,64) -> ST(0)
FBLD m80bcd m80 -> ST(0)
FST m(16,32)real ST(0) -> m(32,64)
ST(i) ST(0) -> ST(i)
FSTP m(32,64,80)real ST(0) -> m(32,64,80), освобождение ST(0)
ST(i) ST(0) -> ST(i), освобождение ST(0)
FIST m(16,32)int ST(0) -> m(16,32)
FISTP m(16,32,64)int ST(0) -> m(16,32,64), освобождение ST(0)
FBSTP m80bcd ST(0) -> m80, освобождение ST(0)
FCMOVcc ST(0), ST(i) ST(i) -> ST(0), если (cc) = 1
FXCH ST(0) <-> ST(1)
FXCH ST(i) ST(0) <-" ST(i)
FLDZ 0 -> ST(0)
FLDL 1 -> ST(0)
FLDPI p -> ST(0)
FLDL2T log210 -> ST(0)
FLDL2E log2e -> ST(0)
FLDLG2 Ig2 -> ST(0)
FLDLN2 In2 -> ST(0)
Если при выполнении команд записи в память регистр ST(0) оказывается
пустым, содержит NAN, L и число, выходящее за пределы представления в
заданном формате, то устанавливается флаг недействительной операции IE =
1 и реализуется прерывание, если значение маски IM = 0. Если установлена
маска IM = 1, то прерывание не выполняется. Для команд FIST, FISTP, FBSTP
в этом случае в память заносится код неопределенности, представленный в
заданном формате: ЦС, КЦ, ДЦ или ДД (см. табл. 2.26).
Команды FCMOVcc выполняют условную пересылку содержимого регистра ST(i)
на вершину стека - в регистр ST(0). В качестве условий пересылки (сс)
используются значения ряда признаков в регистре EFLAGS (табл. 2.29). При
этом мнемокод условия добавляется в качестве суффикса к мнемокоду
команды: например, FCMOVB - команда пересылки при значении признака
переноса CF = 1.
Команда FXCH производит обмен содержимым регистров ST(0) и ST(i)
арифметического стека. Соответственно изменяются и значения тегов для
этих регистров. Если в команде FXCH не указан операнд ST(i), то обмен
производится между регистрами ST(0) и ST(1), расположенными в верхней
части стека. Значение поля ТОР сохраняется неизменным. Если регистры
ST(0), ST(i) пустые, то в них помещается код QNAN (не-число), а затем
выполняется обмен.
Команды загрузки констант FLDZ, FLD1, FLDPI, FLDL2T, FLDL2T, FLDLG2,
FLDLN2 вводят в регистр-вершину стека значения чисел + 0.0; +1.0; р (пи);
log210,1од2е, 1п2, которые хранятся в ПЗУ констант FPU. Эти константы
Предыдущая << 1 .. 65 66 67 68 69 70 < 71 > 72 73 74 75 76 77 .. 528 >> Следующая

Реклама

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed

Есть, чем поделиться? Отправьте
материал
нам
Авторские права © 2009 BooksShare.
Все права защищены.
Rambler's Top100

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed