- •2.5 Процессор чисел с плавающей точкой (fpu)
- •2.5.1 История
- •2.5.2 Математический сопроцессор x87 (fpu)
- •2.5.3 Форматы чисел с плавающей точкой
- •2.5.4 Регистры сопроцессора х87
- •2.5.5 Команды сопроцессора х87
- •Команды передачи данных сопроцессора х87
- •Арифметические команды
- •Команды сравнений
- •Трансцендентные команды
- •Дополнительные арифметические команды
- •Команды управления сопроцессором х87
- •2.6 Команды mmx
- •2.7 Команды sse и 3Dnow!
Арифметические команды
Базовые арифметические команды – сложение, вычитание умножение и деление – имеют два операнда (источник и приемник) и реализуют действия:
ПРИЕМНИК ПРИЕМНИК $ ИСТОЧНИК,
где: $ - основные команды : +, –, *, / .
Для некоммутативных команд вычитания и деления имеются обратные варианты команд (в конце мнемоники добавляется буква R – reveres):
ПРИЕМНИК ИСТОЧНИК $ ПРИЕМНИК.
ВО ВСЕХ КОМАНДАХ ОДИН ОПЕРАНД ДОЛЖЕН БЫТЬ В ВЕРШИНЕ СТЕКА. Мнемоники всех базовых арифметических команд приведены в табл. 2.25.
Таблица 2.25 – Мнемоники базовых арифметических команд
Команды |
Основная |
Целое в памяти |
С извлечением |
Сложение Вычитание Обратное вычитан. Умножение Деление Обратное деление |
FADD FSUB FSUBR FMUL FDIV FDIVR |
FIADD FISUB FISUBR FIMUL FIDIV FIDIVR |
FADDP FSUBP FSUBRP FMULP FDIVP FDIVRP |
Имеется 6 форм базовых команд. Действия всех шести форм команд иллюстрируется на примере команды вычитания.
FSUB mem,
FISUB mem – адресуемый операнд в памяти является источником, а регистр вершины стека ST(0) – приемником. Преобразование в расширенный формат с плавающей точкой осуществляется в процессе выполнения команды. УКАЗАТЕЛЬ СТЕКА НЕ МОДИФИЦИРУЕТСЯ.
FSUB ST, ST(i) – любой численный регистр ST(i) служит источником, а ST(0) – приемником. УКАЗАТЕЛЬ СТЕКА НЕ МОДИФИЦИРУЕТСЯ.
FSUB ST(i), ST – вершина стека является источником, а ST(i) - приемником. УКАЗАТЕЛЬ СТЕКА НЕ МОДИФИЦИРУЕТСЯ.
FSUBP ST(i), ST – вершина стека является источником, а ST(i) – приемником. По окончании операции источник ST(0) извлекается из стека с последующим ИНКРЕМЕНТОМ УКАЗАТЕЛЯ СТЕКА (рис. 2.16).
FSUB – (команда с классической стековой адресацией – использует только ST1, ST0) – извлекает из вершины стека источник (потом инкрементирует указатель стека), затем извлекает приемник (еще раз инкрементирует указатель стека), выполняет операцию и перед включением результата в стек декрементирует указатель. В итоге – ВЕРШИНА СТЕКА СДВИНУЛАСЬ В СТОРОНУ УВЕЛИЧЕНИЯ (рис. 2.17). Последняя форма является частным случаем предыдущей.
|
|
|
|
|
|
ST |
x |
ST(0) |
|
|
|
|
y |
ST(1) |
ST |
y |
ST(0) |
|
|
|
|
|
|
|
|
|
|
|
|
|
z |
ST(i) |
|
z - x |
ST(i-1) |
|
|
|
|
|
|
Рис. 2.16 – Действие команды FSUBP ST(i),ST
|
|
|
|
|
|
|
|
|
|
|
|
ST |
x |
ST(0) |
|
|
|
|
y |
ST(1) |
ST |
y - x |
ST(0) |
|
z |
|
|
z |
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 2.17 – Действие команды FSUB
