<<
>>

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

Группа команд передачи данных предназначена для организации обмена между регистрами стека, вершиной стека сопроцессора и ячейками оперативной памяти. Команды этой группы имеют такое же значение для программирования сопроцес- сора, как команда MOV — для программирования основного процессора.
С помо- щью команд передачи данных осуществляются все перемещения значений опе- рандов в сопроцессор и из него. По этой причине для каждого из трех типов данных, с которыми может работать сопроцессор, существует своя подгруппа команд пере- дачи данных. Собственно, на этом уровне все его умения по работе с различными форматами данных и заканчиваются. Главной функцией всех команд загрузки дан- ных в сопроцессор является преобразование данных к единому представлению в виде вещественного числа расширенного формата. Это же касается и обратной операции — сохранения в ' памяти данных из сопроцессора. Команды передачи данных можно разделить на следующие группы: ⅞- команды передачи данных в вещественном формате; ⅞ команды передачи данных в целочисленном формате; ⅜ команды передачи данных в десятичном формате.
Далее перечислены команды передачи данных в вещественном формате. * FLD источник — загрузка вещественного числа из области памяти на вершину стека сопроцессора. » FSТприемник — сохранение вещественного числа из вершины стека сопроцессо- ра в память. Как следует из анализа мнемокода команды (отсутствует символ Р), сохранение числа в памяти не сопровождается выталкиванием его из стека, то есть текущая вершина стека сопроцессора не меняется (поле ТОР не меняется). » FSTP приемник — сохранение вещественного числа из вершины стека сопроцес- сора в память. В отличие от предыдущей команды, в конце мнемонического обозначения данной команды присутствует символ Р, что означает выталкива- ние вещественного числа из стека после его сохранения в памяти.
Команда из- меняет поле ТОР, увеличивая его на единицу. Вследствие этого вершиной стека становится следующий больший по своему физическому номеру регистр стека сопроцессора. Далее перечислены команды передачи данных в целочисленном формате. ш FILD источник — загрузка целого числа из памяти на вершину стека сопро- цессора. rn FIST приемник — сохранение целого числа из вершины стека сопроцессора в па- мять. Сохранение целого числа в памяти не сопровождается выталкиванием его из стека, то есть текущая вершина стека сопроцессора не изменяется. FISТР приемник — сохранение целого числа из вершины стека в память. Анало- гично сказанному ранее о команде FSTP, последним действием команды являет- ся выталкивание числа из стека с одновременным преобразованием его в целое значение. И наконец, осталось перечислить команды передачи данных в десятичном фор- мате. ш FBLD источник — загрузка десятичного числа из памяти на вершину стека сопро- цессора. ■ в FВSТР приемник — сохранение десятичного числа из вершины стека сопроцессо- ра в области памяти. Значение выталкивается из стека после преобразования его в формат десятичного числа. Заметьте, что для десятичных чисел нет ко- манды сохранения значения в памяти без выталкивания из стека. К группе команд передачи данных можно отнести также команду обмена вер- шины регистрового стека SТ(О) с любым другим регистром стека сопроцессора SТ(i): fxch st(i) Действие команд загрузки FLD, FILD и FBLD можно сравнить с командой PUSH основного процессора. Аналогично ей (PUSH уменьшает значение в регистре SP) команды загрузки сопроцессора перед сохранением значения в регистровом стеке сопроцессора вычитают из содержимого поля ТОР регистра состояния SWR едини- цу. Это означает, что вершиной стека становится регистр с физическим номером на единицу меньше. При этом возможно переполнение стека. Так как стек сопро- цессора состоит из ограниченного числа регистров, то в него может быть записано максимум восемь значений. Из-за кольцевой организации стека девятое записы- ваемое значение затирает первое.
Программа должна иметь возможность обрабо- тать такую ситуацию. По этой причине почти все команды, помещающие свой опе- ранд в стек сопроцессора, после уменьшения значения поля ТОР проверяет регистр — кандидат на новую вершину стека — на предмет его занятости. Для анализа этой и подобных ситуаций используется регистр TWR, содержащий слово тегов (см. рис. 17.1). Наличие регистра тегов в архитектуре сопроцессора позволяет освобо- дить программиста от разработки сложной процедуры распознавания содержимо- го регистров сопроцессора и дает самому сопроцессору возможность фиксировать определенные ситуации, например попытку чтения из пустого регистра или за- пись в непустой регистр. Возникновение таких ситуаций фиксируется в регистре состояния SWR (см. рис. 17.2), предназначенном для сохранения общей информа- ции о сопроцессоре. Используя специальные команды сопроцессора, можно из- влечь из него или, напротив, записать в него информацию (см. далее подраздел «Команды управления сопроцессором» данного раздела). В качестве примера определим несколько констант и выполним их пересылки между оперативной памятью и регистрами сопроцессора, а также между регистра- ми стека. При этом будем следить за состоянием стека сопроцессора. В ходе реали- зации этих операций вполне закономерно возникает вопрос о том, имеются ли какие-либо средства для наблюдения за состоянием регистров сопроцессора, аналогично тому, как это делалось при работе с основным процессором. Для него, как вы помните, мы использовали отладчик Turbo Debuger. Оказывается, что да- леко ходить не нужно. Тот же Turbo Debuger предоставляет нам эту возможность. Чтобы не нарушать структуру общего изложения, материал по Turbo Debuger вы- несен в отдельный раздел «Использование отладчика». С ним можно ознакомить- ся прямо сейчас, после чего вернуться обратно. При наличии у вас другого отлад- чика, отличного от Turbo Debuger, следует обратиться к его описанию и поискать аналогичные средства. Введите программу из листинга 17.1. Выполните ее под управлением отладчи- ка и проследите за тем, как меняется состояние регистров сопроцессора в окне Numeric processor. . Листинг 17.1. Исследование команд передачи данных ; сегмент данных ;ch dt=00 00 00 00 00 00 00 04 35 67 ;x=00 03 ;y_real=41 b4 43 fd 00 00 00 00 начало процедуры main ;st(0)=43S67 ;st (1)=43567, st(О)=З ;st(2)=4З567, st(l)=З, st (0)=340000000 ;st (2)=340000000, st(l)=3, st(0)=43567 ;st (l)=340000000, st(0)=3 ;ch dt_st=ОО 00 00 00 00 00 00 04 35 67 ;st(0)=340000000, x _st=00 03 ;у real st=41 Ь4 43 fd 00 00 00 00 Исследовать работу этой программы полезно с открытым окном Dump, так как при этом хорошо видны различия в представлении типов данных.
<< | >>
Источник: В. И. Юров. Assembler. Учебник для вузов. 2-е изд. 2003

Еще по теме Команды передачи данных:

  1. 18.1. Особенности информационных правоотношений, возникающих при производстве, передаче и потреблении персональных данных
  2. § 29 Передача и переход прав по обязательствам. – Римская конструкция права передачи. – Облегчение передачи новейшим законодательством. – Передаточная надпись. – Ограничения передачи. – Действие передачи. – Ответственность передатчика и права приобретателя. – Вступление в право кредитора или суброгация. – Русский закон передачи. – Передача заемных писем. – Переход требований к кредиторам.
  3. Определение команды.
  4. Признаки команды.
  5. § 4.5. Деятельность команд в организации
  6. Пример настройки и реабилитации в футбольной команде
  7. Работа с другими командами
  8. Четыре шага по созданию эффективной команды
  9. ШЕСТЬ СТУПЕНЕЙ НА ПУТИ СОЗДАНИЯ КОМАНДЫ.
  10. Кто становится лидером команды
  11. Создание деловой команды «Вероятно, я не лучший советчик в этом вопросе».