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

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

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

Арифметическая операция Формы команды Синтаксис Выполняемые действия

Сложение

FADD

FADD < ST>, < регистр> ST: = ST + регистр
FADD < регистр>, ST регистр: = регистр + ST
FADD < операнд> ST: = ST + операнд
FADDP FADDP < регистр>, ST регистр: = регистр + ST, выталкивание из стека

Вычитание

FSUB

FSUB < ST>, < регистр> ST: = ST – регистр
FSUB < регистр>, ST регистр: = регистр – ST
FSUB < операнд> ST: = ST – операнд
FSUBP FSUBP < регистр>, ST регистр: = регистр – ST, выталкивание из стека

Умножение

FMUL

FMUL < ST>, < регистр> ST: = ST * регистр
FMUL < регистр>, ST регистр: = регистр * ST
FMUL < операнд> ST: = ST * операнд
FMULP FMULP < регистр>, ST регистр: = регистр * ST, выталкивание из стека

Деление

FDIV

FDIV < ST>, < регистр> ST: = ST / регистр
FDIV < регистр>, ST регистр: = регистр / ST
FDIV < операнд> ST: = ST / операнд
FDIVP FDIVP < регистр>, ST регистр: = регистр / ST, выталкивание из стека

 

Примеры использования команд:

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) по формуле , при этом значение остатка помещается в вершину стека, а содержимое регистра ST(1) не изменяется. Команда не имеет операндов.

 

Поделиться:





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



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