10.5 Арифметические команды сопроцессора
FLD1 FLDPI . . . FSTP B MOV BX, OFFSET C FST QWORD PTR [BX] MOV DI, OFFSET D FSTP TBYTE PTR [DI] FIST A MOV SI, OFFSET B FISTP DWORD PTR B FISTP C FXCH FXCH ST(2)
10. 5 Арифметические команды сопроцессора Арифметические команды сопроцессора выполняют такие действия с вещественными числами, как сложение, вычитание, умножение, деление, извлечение квадратного корня и другие. Далее рассмотрены наиболее часто используемые арифметические команды сопроцессора. Арифметические команды сложения, вычитания, умножения и деления имеют две формы: с выталкиванием из стека и без выталкивания. Команды с выталкиванием из стека (мнемоническое обозначение заканчивается на букву ‘P’) выталкивают из стека значение операнда после записи результата в стек. Команды без выталкивания из стека не выталкивают из стека значений операндов. Команды без выталкивания из стека, в свою очередь, также имеют две формы: выполнение операции над двумя регистрами и выполнение операции над регистром ST(0) и ячейкой памяти. В первом случае синтаксис команды следующий: < команда> ST, < регистр> или < команда> < регистр>, ST
В указанный регистр или регистр ST(0) помещается результат выполнения операции над двумя регистрами. Например: < команда> ST, ST(1)
В этом примере результат выполнения операции над регистрами ST(0) и ST(1) помещается в регистр ST(0). Во втором случае синтаксис команды такой: < команда> < операнд>
Операнд может быть ячейкой памяти размером 4 байта для одинарной точности или 8 байт для двойной точности. Команды с выталкиванием из стека имеют следующий синтаксис: < команда> < регистр>, ST Сначала производится арифметическая операция, результат выполнения операции записывается в указанный регистр, а затем из стека выталкивается значение операнда (регистр ST(0)). Пример:
< команда> ST(2), ST В этом примере производится арифметическая операция над регистрами ST(0) и ST(2), результат записывается в регистр ST(2), а затем из стека выталкивается значение операнда (регистр ST(0)). В табл. 15 представлены арифметические команды сопроцессора.
Таблица 15 Арифметические команды сопроцессора
Примеры использования команд: X DD 0. 1 ; определение числа X Y DD –0. 5 ; определение числа Y . . . FLD X ; загрузка числа X FLD Y ; загрузка числа Y FADDP ST(1), ST ; ST(1): = ST(1) + ST(0), ; выталкивание операнда . . . FLD X ; загрузка числа X FLD Y ; загрузка числа Y FSUB ST, ST(1); ST(0): = ST(0) – ST(1) . . . FLD X ; загрузка числа X FLD Y ; загрузка числа Y FMUL ST(1), ST; ST(1): = ST(1) * ST(0)
. . . FLD X ; загрузка числа X FDIV Y ; ST(0): = ST(0) / Y
Команда FSQRT Команда FSQRT извлекает квадратный корень из значения регистра ST(0) и помещает результат в регистр ST(0). Пример использования команды FSQRT: X DQ 225. 0; определение числа X . . . FLD X ; загрузка числа X FSQRT ; извлечение корня
Команда FSCALE Команда FSCALE умножает значение регистра ST(0) на двойку в степени значения регистра ST(1) и записывает результат в регистр ST(0), или ST(0): = ST(0) * 2ST(1). При этом значение степени числа 2 округляется до наименьшего целого числа. Пример использования команды FSCALE: X DQ 1. 25 ; определение числа X Y DQ 64. 0 ; определение числа Y . . . FLD Y ; загрузка числа Y FLD X ; загрузка числа X FSCALE ; ST(0): = X * 2Y Команда FABS Команда FABS помещает в регистр ST(0) абсолютное значение регистра ST(0), или ST(0): = |ST(0)|. Пример использования команды FABS: X DQ –1. 0 ; определение числа X . . . FLD X ; загрузка числа X FABS ; вычисление абсолютного значения
Команда FCHS Команда FCHS изменяет знак числа в регистре ST(0) на противоположный и помещает результат в регистр ST(0), или ST(0): = –ST(0). Пример использования команды FCHS: X DQ 100. 0 ; определение числа X . . . FLD X ; загрузка числа X FCHS ; изменение знака
Команда FPREM Команда FPREM вычисляет остаток от деления ST(0) на ST(1) по формуле
Воспользуйтесь поиском по сайту: ![]() ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|