Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Команды передачи данных в целочисленном формате.




Система команд сопроцессора

Система команд сопроцессора включает около 80 машинных команд. Рассмотрим

их классификацию (рис.17.16).

Мнемоническое обозначение команд сопроцессора характеризует особенности их работы:

1. Все мнемонические обозначения начинаются с символа F (Float).

2. Вторая буква мнемонического обозначения определяет тип операнда в памяти, с которым работает команда:

i – целое двоичное число;

b – целое десятичное число;

отсутствие буквы — вещественное число.

3.Последняя буква p в мнемоническом обозначении команды означает, что последним действием команды обязательно является извлечение операнда из стека.

4. Последняя или предпоследняя буква R (reversed) в мнемоническом обозначении команды означает реверсивное следование операндов при выполнении команд вычитания и деления, так как для них важен порядок следования операндов.

 

Система команд сопроцессора отличается большой гибкостью в выборе вариантов задания команд, реализующих определенную операцию, и их операндов.

Минимальная длина команды сопроцессора – 2 байта.

Методика написания программ для сопроцессора имеет свои особенности. Главная причина – в стековой организации сопроцессора.

При разработке программ необходимо учитывать следующие факторы:

– ограниченность глубины стека сопроцессора;

– несовпадение форматов операндов;

– в отсутствие поддержки на уровне команд сопроцессора некоторых операций, таких как возведение в степень, вычисление тригонометрических функций.

Команды передачи данных

Группа команд передачи данных предназначена для организации обмена между регистрами стека, вершиной стека сопроцессора и ячейками оперативной памяти.

Команды этой группы имеют такое же значение для программирования сопроцессора, как команда MOV – для программирования основного процессора. Главной функцией всех команд загрузки данных в сопроцессор является преобразование данных к единому представлению в виде вещественного числа расширенного формата. Это же касается и обратной операции — сохранения в памяти данных из сопроцессора.

Команды передачи данных можно разделить 3 группы:

1. Команды передачи данных в вещественном формате;

2. Команды передачи данных в целочисленном формате;

3. Команды передачи данных в десятичном формате.

Команды передачи данных в вещественном формате.

fld источник — загрузка вещественного числа из области памяти на вершину стека сопроцессора.

fst приемник — сохранение вещественного числа из вершины стека сопроцессора в память. Как следует из анализа мнемокода команды (отсутствует символ p), сохранение числа в памяти не сопровождается выталкиванием его из стека, то есть текущая вершина стека сопроцессора не меняется (поле ТОР не меняется).

fstp приемник — сохранение вещественного числа из вершины стека сопроцессора в память. В отличие от предыдущей команды, в конце мнемонического обозначения данной команды присутствует символ p, что означает выталкивание вещественного числа из стека после его сохранения в памяти. Команда изменяет поле ТОР, увеличивая его на единицу. Вследствие этого вершиной стека становится следующий больший по своему физическому номеру регистр стека сопроцессора.

Команды передачи данных в целочисленном формате.

fild источник – загрузка целого числа из памяти на вершину стека сопроцессора.

fist приемник – сохранение целого числа из вершины стека сопроцессора в память. Сохранение целого числа в памяти не сопровождается выталкиванием его из стека, то есть текущая вершина стека сопроцессора не изменяется.

fistp приемник – сохранение целого числа из вершины стека в память. Аналогично сказанному ранее о команде FSTP, последним действием команды является выталкивание числа из стека с одновременным преобразованием его в целое значение.

3. Команды передачи данных в десятичном формате.

fbld источник – загрузка десятичного числа из памяти на вершину стека сопроцессора.

fbstp приемник – сохранение десятичного числа из вершины стека сопроцессора в области памяти. Значение выталкивается из стека после преобразования его в формат десятичного числа.

Для десятичных чисел нет команды сохранения значения в памяти без выталкивания из стека.

Команда обмена вершины регистрового стека st(0)с любым другим регистром стека сопроцессора st(i):

fxch st(i)

Действие команд загрузки fld, fild и fbld можно сравнить с командой push основного процессора. Аналогично ей (push уменьшает значение в регистре sp) команды загрузки сопроцессора перед сохранением значения в регистровом стеке сопроцессора вычитают из содержимого поля ТОР регистра состояния SWR единицу. Это означает, что вершиной стека становится регистр с физическим номером на единицу меньше.

 

Для наблюдения за состоянием регистров сопроцессора, используется окно Numeric processor. (View – Numeric Processor).

Команды загрузки констант

Основным назначением сопроцессора является поддержка вычислений с плавающей точкой. В математических вычислениях довольно часто встречаются предопределенные константы, и сопроцессор хранит значения некоторых из них.

Для каждой предопределенной константы существует специальная команда, которая производит загрузку ее на вершину регистрового стека сопроцессора:

fldz – загрузка нуля;

fld1 – загрузка единицы;

fldpi – загрузка числа Пи;

fldl2t – загрузка двоичного логарифма десяти;

fldl2e – загрузка двоичного логарифма экспоненты (числа е);

fldlg2 – загрузка десятичного логарифма двойки;

fldln2 – загрузка натурального логарифма двойки.

Команды сравнения данных

Команды сравнения данных сравнивают значение числа в вершине стека и операнда, указанного в команде.

fcom [операнд_в_памяти ] – команда без операндов сравнивает два значения: одно находится в регистре st(0), другое в регистре st(1). Если указан операнд [операнд_в_памяти ], то сравнивается значение в регистре ST(0) стека сопроцессора со значением в памяти.

fcomp операнд – команда сравнивает значение в вершине стека сопроцессора st(0)со значением операнда, который находится в регистре или в памяти. Последним действием команды является выталкивание значения из st(0).

fcompp операнд – команда аналогична по действию команде fcom без операндов, но последним ее действием является выталкивание из стека значений обоих регистров, st(0)и st(1).

ficom операнд_в_памяти – команда сравнивает значение в вершине стека сопроцессора st(0) с целым операндом в памяти. Длина целого операнда — 16 или 32 бита, то есть это целое слово и короткое целое.

ficomp операнд – команда сравнивает значение в вершине стека сопроцессора st(0) с целым операндом в памяти. После сравнения и установки битов С3...С0 команда выталкивает значение из ST(0). Длина целого операнда – 16 или 32 бита, то есть это целое слово и короткое целое.

ftst – команда не имеет операндов и сравнивает значения в st(0) с нулем (значением 00).

Предыдущие команды сравнения работают корректно, если операнды в них являются целыми или вещественными числами. Когда один из операндов оказывается нечислом, то фиксируется исключение недействительной ситуации, а коды условия С3...С0 соответствуют исключительной ситуации несравнимых или неупорядоченных операндов. Само же действие сравнения не производится.

Процессор предоставляет три команды, позволяющие все же произвести сравнение таких операндов, но как вещественных чисел без учета их порядков.

fucom st(i) – команда сравнивает значения (без учета их порядков) в регистрах стека сопроцессора st(0)и st(i).

fucomp st(i) – команда сравнивает значения (без учета их порядков) в регистрах стека сопроцессора st(0)и st(i). Последним действием команды является выталкивание значения из вершины стека.

fucompp st(i) – команда сравнивает значения (без учета их порядков) в регистрах стека сопроцессора st(0)и st(i). Последние два действия команды одинаковы — выталкивание значения из вершины стека.

В результате работы команд сравнения в регистре состояния устанавливаются следующие значения битов кода условия С3,С2,С0:

если st(0)>операнда, то 000;

если st(0)<операнда, то 001;

если st(0)=операнду, то 100;

если операнды неупорядочены, то 111.

Для того чтобы получить возможность реагировать на эти коды командами условного перехода основного процессора (вспомните, что они реагируют на флаги в EFLAGS), нужно как-то записать сформированные биты условия СЗ,С2,СО в регистр ЕFLAGS.В системе команд сопроцессора существует команда FSTSW, которая позволяет запомнить слово состояния сопроцессора в регистре АХ или ячейке памяти. Далее значения нужных битов извлекаются и анализируются командами основного процессора.

Например, запись старшего байта слова состояния, в котором находятся биты СО...СЗ, в младший байт регистра EFLAGS/FLAGS осуществляется командой SAHF. Эта команда записывает содержимое АН в младший байт регистра EFLAGS/FLAGS. После этого бит С0 записывается на место флага CF,C2 — на место PF,СЗ — на место ZF. Бит С1 выпадает из общего правила, так как в регистре флагов на месте соответствующего ему бита находится единица. Анализ этого бита нужно проводить с помощью логических команд основного процессора. Зная все это, вам остается, исходя из особенностей своего алгоритма, применять те команды условного перехода, которые анализируют состояние указанных флагов.

 

К группе команд сравнения данных логично отнести и команду FXAM, которая анализирует операнд в вершине стека сопроцессора ST(0)и формирует значение битов СО,Cl,С2,СЗ в регистре состояния сопроцессора SWR. По состоянию этих битов можно судить:

– о знаке мантиссы — знаковый бит операнда в st(0) заносится в бит c0 регистра SWR;

– корректности записи вещественного числа в ST(0)— идентифицируются пустой регистр, корректное вещественное число, нечисло и неизвестный формат;

типе специального численного значения: бесконечность, нуль, денормализованный операнд.

Арифметические команды

Команды сопроцессора, входящие в группу арифметических команд, реализуют четыре основные арифметические операции — сложение, вычитание, умножение и деление. Имеется также несколько дополнительных команд, предназначенных для повышения эффективности использования основных арифметических команд.

С точки зрения типов операндов арифметические команды сопроцессора можно разделить на команды, работающие с вещественными и целыми числами.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...