Еще одна разновидность команды сохранения – fstp

Теперь кратко рассмотрим команды сопроцессоры.

·                    Первая группа команд – загрузка, сохранение.

Для вещественного формата  команда загрузки выглядит следующим образом: fld ( все команды сопроцессора начинаются с буквы f). Данная команда имеет один операнд – либо ячейка памяти, с использованием любых форм адресации, либо регистр сопроцессора ST(i). Эта команда загружает ячейку из памяти в вершину стека сопроцессора.

Команда сохранения – fst ( от слова store). Операндом тоже является либо ячейка памяти либо регистр стека сопроцессора. Эта команда сохраняет число из вершины стека сопроцессора в ячейку памяти, либо в другом регистре сопроцессора, при этом текущая вершина стека не меняется, просто сохраняем данные из вершины стека. Данная команда не может сохранить данные в расширенном формате, а только в коротком или двойном формате

Еще одна разновидность команды сохранения – fstp. Точно такие же правила для операнда как и в предыдущих случаях. Отличается от команды fst тем, что поддерживает и расширенный формат при сохранении. Также важно заметить, что эта команда выталкивает данные из стека, то есть содержимое вершины стека сохраняется в указанном месте, и выталкивается из стека. После этой команды вершиной стека будет следующий по порядку регистр st1.

·         Для целых чисел команды:

Аналогичная команде fldбудет команда fild (индекс Iот слова integer), те же правила дляоперанда.

Команда сохранения – fist

Команда сохранения и выталкивания из стека – fistp.

·                    Третья группа команд загрузки/выгрузки – для работы с BCDчислами.

Используются команды с прибавлением вместо буквы I, буквы b .

Fbld – команда загрузки, команды сохранения без выталкивания из стека нет, только с выталкиванием – fbstp.

 

Следующие команды – математические.

Мы разберем только команду сложения, остальные действуют аналогично. Команда сложения записывается как fadd. У нее есть три формы – без операндов, с один операндом, с двумя операндами:

·         Первая форма – без операндов. В этом случае команда производит действия над двумя регистрами стека – нулевым и первым. Результат этой операции записывается в st(1), и происходит выталкивание из стека, и поэтому результат оказывается уже в st(0). Пример показан на слайде.

·         Вторая форма – с одним операндом. Операнд – только ячейка памяти. В этом случае команда выполняет операцию сложения над вершиной стека и ячейкой памяти, результат сохраняется в вершине стека. Пример на слайде.

·         Третья форма – с двумя операндами. Здесь оба операнда – регистры сопроцессора. И один из этих регистров обязан быть вершиной стека, то есть код команды выглядит как faddst(0),st(i) либо как faddst(i),st(0), даже могут быть оба вершиной стека, просто мы в данном случае получим удвоенное значение. Из стека здесь ничего не выталкивается, результат записывается в приемник, то есть первый операнд после команды. Пример на слайде. STв данном случае подразумевает ST(0) – когда мы хотим использовать вершину стека, индекс можно опустить.

Ссылка на основную публикацию
Adblock detector