Система команд арифметического процессора
Система команд сопроцессора состоит из четырех групп команд: команды передачи данных, основные вычислительные команды, команды управления и специальные вычислительные команды.
Напомним, что АП может быть использован только совместно с ЦП и, следовательно, его систему команд можно рассматривать как расширение системы команд ЦП. Программные средства, которые обеспечивают взаимодействие процессоров, составляют команды WAIT и ESC. Команда WAIT служит для перевода ЦП в режим ожидания на время выполнения команды арифметическим процессором. На рис. 2.7,а представлен обобщенный формат команд сопроцессора. Команда может содержать от двух до четырех байт. Первый байт любой команды содержит код 11011 (ESC). Поля Х и Y отводятся для задания КОП. Если операция выполняется над одним операндом, то он всегда располагается в вершине стека ST(0), при этом поле mod=11, а поле r/т служит для задания КОП, т. е. является как бы продолжением полей Х и Y. Если операция двухоперандная, то один из операндов располагается в вершине стека ST(0), а адрес второго задается полями mod и r/т. Значение поля mod определяет наличие и размерность смещения. При mod=00 смещение отсутствует и команда состоит из 2 байт, при mod=01 или 10 смещение соответственно 8- или 16-разрядное и команда состоит из 3 или 4 байт. Код поля r/т в этих случаях определяет способ формирования исполнительного адреса ЕА операции в соответствии с табл. 1.2. Значение поля mod=11 указывает на то, что операнд находится в регистре ST(i), номер i которого задается двоичным кодом в поле r/m. В ряде команд два старших разряда поля Х используются для задания типа операнда, находящегося в памяти (рис. 2.7,б). Соответствие форматов операнда и значений поля MFпредставлено в табл. 2.7.
Таблица 2.7
Код поля MF | Формат операнда |
КВФ | |
ДВФ | |
16-разрядное целое | |
32-разрядное целое |
Команды передачи данных.Включают команды загрузки, запоминания и пересылки.
Команды загрузки. Эти команды (табл. 2.8) позволяют записывать данные из памяти в вершину стека. Они автоматически изменяют значение указателя стека ST = ST - 1 и анализируют значение соответствующего поля TAG в регистре этикеток TR. Если значения TAG=11 (е), то данные загружаются в вершину стека ST(0) по новому значению указателя. Если ТАG=00, 01 или 10 - это означает, что текущий регистр в стеке уже заполнен. В этом случае сопроцессор взводит флаг IE исключительной ситуации и новое значение не загружается, если флаг IE не замаскирован. Данные, которые извлекаются из памяти, могут быть представлены в любом из форматов: целые 16-, 32- и 64-разрядные, целые двоично-десятичные и вещественные (КВФ, ДВФ, ВВФ). Перед записью в стек АП автоматически переводит их в формат ВВФ. Такой перевод никогда не вызывает потерю точности, поскольку ВВФ позволяет представить числа в самом широком диапазоне значений.
Таблица 2.8
Мнемокод команды | Тип данных | Выполняемые действия |
FLD addr | Вещественные | (аddr)->ST(0) |
FILD addr | Целые | |
FBLD addr | Двоично-десятичные |
При выполнении различных вычислений часто используется ряд констант. Наиболее употребительные константы записаны в ПЗУ констант АП, они могут быть загружены в ST(0) с применением команд загрузки констант (табл. 2.9).
|
Мнемокод команды | Выполняемые действия |
FLDZ | «0» -> ST(0) |
FDD1 | «1» -> ST(0) |
FLDPI | 3,1415…-> ST(0) |
FLD2I | log2 (10) -> ST(0) |
FLD2E | 1og е -> ST(0) |
FLDLG2 | 1g2 -> ST(0) |
FLDLN2 | 1n2 -> ST(0) |
Все константы представлены в формате ВВФ, т. е. обеспечивают высокую точность вычислений.
Команды запоминания. Эти команды (табл. 2.10) осуществляют передачу данных из вершины стека ST(0) в память. Существуют две разновидности команд запоминания: запоминаниебез выталкивания данных (FST, FIST) и запоминаниес выталкиванием данных (FSTP, FISTP, FBSTP) из вершины стека. После запоминания автоматически изменяется содержимое TAG-11 (е - пусто) и увеличивается значение указателя ST=ST+1. При запоминании с выталкиванием сопроцессор автоматически переводит данные из ВВФ в любой желаемый формат. Такой перевод может вызвать исключительные ситуации, связанные с потерей точности (взводится флаг PE), денормализацией (взводится флаг UE) и переполнением (взводится флаг OE). На рис. 2.8 показаны операции загрузки и запоминания.
Таблица 2.10
Мнемокод команды | Тип данных | Выполняемые действия |
FST addr | КВФ, ДВФ | ST(0) -> (аddr) |
FIST addr | Целые 16 и 32- разрядные | ST(0) -> (аddr) |
FSTP addr | КВФ, ДВФ, ВВФ | ST(0) -> (аddr) + POP |
FISP addr | Целые 16, 32 и 64 - разрядные | ST(0) -> (аddr) + POP |
FBSTP addr | Двоично-десятичные | ST(0) -> (аddr) + POP |
|
|
Команды пересылки. Эти команды (табл. 2.11) позволяют осуществлять
Таблица 2.11
Мнемокод команды | Выполняемые действия |
FLD ST(i) | ST(i) -> ST(0) + PUSH |
FST ST(i) | ST(0) -> SТ(i) |
FSTP ST(i) | ST(0) -> ST(i ) + PUSH |
FXCH ST(i) | ST(0) <-> ST(i) |
передачу данных между различными регистрами стека. Команды FLD ST(i)и FSTP ST(i)выполняются как стеновые операции, т. е. загрузка сопровождается операцией записи в стек PUSH, а запоминание - операцией выталкивания из стека POP. Например, команда FLD ST (0) позволяет задублировать содержимое вершины стека в двух регистрах ST(0) и ST(1). Две другие команды, FST ST(i) и FXCH ST(i), осуществляют пересылку и обмен без изменения указателя стека, т. е. обращаются к регистрам ST(0) и ST(i) не как к стеку.
Основные вычислительные команды.Включают в себя различные арифметические команды и команды сравнения.
Элементарные арифметические команды. Эти команды (табл. 2.12)
Таблица 2.12
Мнемокод команды | Выполняемые действия |
FADD | ST(0) + ST(1) -> ST(0) |
FSUB | ST(0) - ST(1) -> ST(0) |
FSUBR | ST(1) - ST(0) -> ST(0) |
FMUL | ST(0) x ST(1) -> ST(0) |
FDIV | ST(0) / ST(1) -> ST(0) |
FDIVR | ST(1) / ST(0) -> ST(0) |
выполняют четыре арифметических действия над операндами, размещенными в двух верхних элементах стека ST(0) и ST(1) с занесением результата в ST(0). В обычных операциях сложения FADD, вычитания FSUB, умножения FMUL и деления FDIV первый операнд берется из вершины стека ST(0), а второй из следующего элемента ST(1). Поскольку результат вычитания и деления зависит от порядка следования операндов, введены так называемые обратные операции вычитания FSUBR и деления FDIVR, которые меняют операнды местами. Для обеспечения большей гибкости при выполнении арифметических действий введены арифметические команды с расширенными возможностями (табл. 2.13). При использовании этих команд один операнд должен находиться в вершине стека, а второй - в произвольном регистре ST(i)или в памяти. В последнем случае операнд может быть представлен только в двух форматах КВФ и ДВФ.
Таблица 2.13
Мнемокод команды | ||
(а) | (б) | (в) |
FADD | FADDP | FIADD |
FSUB | FSUBP | FISUB |
FSUBR | FSUBRP | FISUBR |
FMUL | FMULP | FIMUL |
FDIV | FDIVP | FIDIV |
FDIVR | FDIVRP | FIDIVR |
Результат операции может быть размещен в произвольном регистре ST(i). Возможности размещения второго операнда и результата различны для мнемокодов команд, представленных в различных столбцах (а, б, втабл. 2.13).
Команды (а) допускают размещение второго операнда как в памяти, так и в произвольном регистре ST(i),причем результат может быть размещен в произвольном регистре. Команды (б) допускают размещение второго операнда и запись результата в произвольный регистр. При выполнении команд (б) дополнительно осуществляется выталкивание из стека содержимого его вершины. Команды (в) допускают размещение второго операнда только в памяти, а результат размещения в вершину стека ST (0). Эти команды выполняют арифметические действия над 16- и 32-разрядными целыми числами.
Мнемокоды команд (а) не отличаются от мнемокодов элементарных арифметических команд. Они расширяют возможности программиирования и позволяют, например, записать команду FADD ST, ST(i),которая в отличие от команды FADD второй операнд выбирает из ST (i), а не из ST(1) (при записи команд допускается написание ST вместо ST (0)). Можно также записать команду FADD ST(3), ST, которая результат размещает в ST(3), а не в вершину. Удобно использование команд типа FADD ST, ALPHA, где ALPHA - адрес памяти, с которого размещено второе слагаемое. Эта команда эквивалентна паре команд FLD ALPHA и FADD. Отметим, что запись команды в виде FADD ALPHA,ST недопустима, поскольку результат не может быть размещен в памяти. Эту команду можно реализовать с помощью двух команд FADD ST, ALPHA и FST ALPHA.
Элементарные команды сравнения. Эти команды (табл. 2.14) позволяют сравнивать данные, расположенные в двух верхних регистрах стека ST(0) и ST(1) (команды FCOM, FCOMP, FCOMPP), а также сравнивать с нулем (FTST) и анализировать данные в вершине FXAM. Команды сравнения могут выполняться без изменения состояния стека (FCOM), с выталкиванием одного из сравниваемых данных (FCOMP) и с выталкиванием обоих сравниваемых данных (FCOMPP).
Таблица 2.14
Мнемокод команды | Выполняемые действия |
FCOM | ST(0) сравнивается с ST (1) |
FCOMP | ST(0) сравнивается с ST (1) и выталкивается |
FCOMPP | ST(0) сравнивается с ST (1) и оба выталкиваются |
FTST | ST(0) сравнивается с нулем |
FXAM | ST(0) анализируется |
Результаты сравнения помещаются в регистр состояния SR (разряды С3, С0). Значения флагов С3,С0 устанавливаются в зависимости от соотношения сравниваемых данных в соответствии с табл. 2.3. Поскольку при реализации алгоритмов довольно часто производится сравнение с нулем, введена соответствующая команда FTST. Команда FXAM выполняет детальный анализ содержимого вершины стека и помещает результаты в регистр состояния SR (разряды С0-C3). Значения флагов С0,C1,C3 устанавливаются в зависимости от результатов анализа (см. табл. 2.4). Флаг С2 указывает знак числа, расположенного в вершине.
Для обеспечения большей гибкости при сравнениях введены команды сравнения с расширенными возможностями: FCOM addr, FCOMP addr, FICOM addr и FICOMP addr, где addr - ST(i)или адрес памяти (mem). Возможности размещения второго операнда различны для мнемокодов FCOM, FCOMP и FICOM, FICOMP. Первые две команды допускают размещение второго операнда как в памяти, так и в произвольном регистре ST(i)и позволяют выполнять сравнение вещественных чисел в форматах КВФ и ДВФ. Вторые две команды допускают размещение второго операнда только в памяти и позволяют сравнивать 16- и 32-разрядные целые числа. Во всех случаях результаты сравнения помещаются в разряды С3,С0регистра состояния.
Команды управления.Включают различные команды управления сопроцессором и насчитывают 15 мнемокодов.
Команда FINIT - начальной инициализации производит действия, аналогичные тем, которые выполняются по внешнему сигналу RESET. Эта команда позволяет в любой момент осуществить начальную установку сопроцессора.
Команды FENI и FDISI - разрешения и запрещения выдачи запросов прерывания на выходе INT арифметического процессора позволяют устанавливать в «1» и сбрасывать в «0» разряд-маску IEM, назначение которого описано выше.
Команда FLDCW addr позволяет загружать управляющее слово в регистр управления CR. Управляющее слово должно быть предварительно сформировано в памяти, где в соответствующих полях (см. рис. 2.4) задаются необходимые режимы округления RC, управления точностью РС, тип арифметики IC, а также разряды-маски исключительных ситуаций РМ, UM, OM, ZM, DM, IM.
Команда FSTCW addr позволяет запомнить содержимое регистра управления в памяти по указанному адресу.
Команда FCLEX - обнуление флагов исключительных ситуаций позволяет сбросить эти флаги в «0». Напомним, что любой из флагов PE, UE, ОЕ, ZE, DE и IE, будучи однажды установлен в «1», будет находиться в этом состоянии вплоть до подачи команды FCLEX.
Команда FSTSW addr позволяет запомнить слово-состояние в памяти по указанному адресу. Под словом-состоянием понимается содержимое регистра состояния SR. Эта команда используется для организации условных переходов по результатам сравнения чисел. Поскольку в системе команд АП отсутствуют команды переходов, то для того, чтобы воспользоваться соответствующей командой ЦП необходимо предварительно передать результаты сравнения чисел из регистра SR сопроцессора в регистр F центрального процессора.
Флаги С0,С3 расположены в разрядах регистра состояния SR, соответствующих расположению флагов CF, ZF центрального процессора. Это обеспечивает простую реализацию условных переходов по результатам сравнения чисел в АП.
Команда FSTENV addr позволяет запомнить в памяти по указанному адресу состояние всех регистров окружения. Последовательность записи регистров в память представлена на рис. 2.9,а.
|
Команда FLDENV addr загружает регистры окружения сопроцессора данными из памяти, расположенными по указанному адресу.
Команда FSAVE addr производит запись в память по указанному адресу состояния регистров окружения и арифметических регистров сопроцессора. Эта информация запоминается в памяти в форме, представленной на рис. 2.9, б.
Команда FRSTOR addr осуществляет обратную пересылку, т. е. загружает регистры сопроцессора данными из памяти, расположенным по указанному адресу.
Команды FINCSTP и FDECSTP увеличивают и уменьшают соответственно значения указателя стека ST на единицу. Эти команды не изменяют содержимое стека и регистра-этикеток TR.
Команда FFREE присваивает значение TAG(i)=11 (еmpty), которое указывает, что регистр ST(i)не инициализирован.
Команда FNOP заставляет сопроцессор пропустить три такта работы, не выполняя никаких действий.
Специальные вычислительные команды. Выполняют специфические операции, которые часто используются при вычислениях (табл. 2.15).
Таблица 2.15
Мнемокод команды | Содержание команды |
FABS | Абсолютное значение ST(0) |
FCHS | Изменение знака ST(0) |
FRNDINT | Округление ST(0) |
FXTRACT FSQRT | Выделение мантиссы и порядка ST(0) |
Вычисление квадратного корня из ST(0) | |
FSCALF | Масштабирование |
FPREM | Получение частичного остатка |
FPTAN | Вычисление частичного тангенса |
FPATAN | Вычисление частичного арктангенса |
FYL2Х FYL2ХР1 F2XM1 | ST(0) = ST(1) log2(ST(0)) ST(0) = ST(1) log2(ST(0)+1) ST(0) = 2ST(0) - 1 |
Команда FABS формирует абсолютное значение (модуль) числа, находящегося в вершине стека.
Команда FCHS изменяет знак числа, находящегося в вершине, на противоположный.
Команда FRNDINT производит округление числа, находящегося в вершине стека, до целого. Если исходное число представлено в формате целого, то оно не изменяется командой. Число, представленное в формате вещественного, округляется до целого в соответствии с заданным режимом округления (поле RC в регистре CR, см. табл. 2.5).
Команда FXTRACT выделяет мантиссу и порядок числа. Например, перед выполнением команды FXTRACT ST(0) = 2,71 х 2-15, тогда после ее выполнения в вершине формируется значение мантиссы ST(0) = 2,71 х 20, а в следующем регистре значение порядка ST (1) = -15 х 20, представленные в формате ВВФ.
Команда FSQRT извлекает квадратный корень из числа, находящегося в вершине стека.
Команда FSCALE производит масштабирование числа, находящегося в вершине стека. Масштабный коэффициент перед выполнением команды должен быть размещен в ST(1). Действия команды состоят в сложении порядка числа с масштабным коэффициентом и размещением результата в поле порядка. Масштабирование эквивалентно умножению и делению (если коэффициент отрицательный) исходного числа на 2n, где n - масштабный коэффициент. Поскольку значение коэффициента остается без изменений, циклическое использование команды с предварительной загрузкой ST(0) и последующим запоминанием результата позволяет масштабировать массивы чисел.
Команда FPREM позволяет получить частичный остаток от деления чисел. Циклическое использование этой команды с запоминанием промежуточных значений частного позволяет получить точное значение частного с любой, наперед заданной, степенью точности. Признаком завершения команды (получения нулевого частичного остатка) является значение флага С2 (С2=0 - команда завершена, С2=1 - команда не завершена), который позволяет управлять переходом на повторение цикла или завершение операции.
Команда FPTAN вычисляет частичный тангенс числа. Исходное значение z размещается в ST(0). Результат выполнения команды FPTAN - значения х и у, где ST(0) = х, ST(1) = у, могут быть использованы для вычисления tg z/2=у/х, а также других тригонометрических функций, например sin z=2(y/х)/[1+(у/х)2].
Команда FPATAN реализует обратную функцию - вычисление частичного арктангенса. Исходные частичные значения х и y размещаются в ST(0) и ST(1) соответственно. Результат z = arctg у/х размещается в вершине стека ST(0). Использование известных формул позволяет по z получить значение других обратных тригонометрических функций.
Команда FYLT2X позволяет вычислить значение логарифмической функции z = ylog2x, где х, у предварительно располагаются в ST(0), ST(1) соответственно, а результат z размещается в ST(0).
Команда FYL2XP1 служит для вычисления значений логарифмической функции z = y(log2x+1) с аналогичным размещением исходных значений и результата.
Команда F2XM1 позволяет вычислить значение показательной функции z=2x - 1. Показатель x предварительно размещается в ST(0), где получается и результат.
Набор команд FYL2X, FYL2XP1 и F2XM1 в совокупности с рассмотренными ранее командами загрузки констант позволяет достаточно просто вычислять другие логарифмические и показательные функции по известным формулам.
Контрольные вопросы
- В чем состоит основное назначение арифметического процессора?
- В каком формате осуществляются все операции в АП?
- Каким образом осуществляются условные переходы по результатам сравнения чисел в АП?
- Объясните назначение регистра этикеток.
- Как в потоке команд отличить мнемокод команды для АП?
- Как ЦП узнает об исключительной ситуации в АП?
- Используя специальные вычислительные команды, напишите процедуру для вычисления x y.
- Как и какие способы округления поддерживает АП?
- Сколько мнемокодов включает система команд АП?
- В каком состоянии находится ЦП когда АП выполняет команду?
- Перечислите все регистры окружения и объясните их назначение.
- В каком из форматов можно представит самое большое вещественное число и каков его порядок?
- Зачем используются коды NAN?
- Перечислите все флаги исключительных ситуаций и объясните их назначение.
- Что такое двоично-десятичный формат представления целых чисел? Представьте число 9374 в формате ДДФ.
- Представьте число -0,75 в формате КВФ.
- Для чего в диапазон представления вещественных чисел включены коды для представления +0,0 и -0,0?
- Когда и почему при сохранении результатов вычислений в памяти может происходить потеря точности?
- Для чего в регистре состояния служит поле ST?
- Какие способы округления можно задать с помощью поля RC регистра управления?
- Перечислите все группы команд АП.
- В чем основное различие команд загрузки и команд запоминания?
- Выполнение каких команд может приводить к потере точности?
- В чем заключается особенность выполнения команд условных переходов?
- Для каких арифметических команд целесообразно ввести возможность перемены мест операндов перед выполнением операции?
- Какой тип арифметики позволяет задать флаг IP? В чем различие типов?
- Напишите фрагмент программы, осуществляющий пересылку результатов сравнения из регистра SR в регистр F.
- Как обрабатываются исключительные ситуации по умолчанию, если они замаскированы?
- Составьте программу, реализующую вычисление функции yx.
- Составьте программу, реализующую функцию n! (факториал).
Дата добавления: 2018-11-26; просмотров: 807;