Поcле выполнения операции осуществляется инкремент указателя стека и
результат помещается в новую вершину стека, заменяя исходное содержание
ST(1). Это классическая операция для машин со стековой адресацией.
Когда в бинарной операции определен один операнд, она выполняется с
привлечением указанного в команде регистра (ячейки памяти) и
содержимого вершины стека. Результат загружается в старую вершину стека
и указатель стека не изменяется.
Если же в бинарной команде указаны два операнда, ими является
содержимое двух регистров стека, причем одним из них будет ST(0), а
вторым ST(i). Возможны три случая:
• источникам является ST(0), а получателем ST(i);
• источник — ST(i), получатель — ST(0);
• источникам является ST(0), получателем ST(i) и производится
инкремент указателя стека, т.е. “источник” пропадает.
Отметим, что в несимметричных операциях деления и вычитания
обычно получатель делится на источник (из получателя вычитается
источник). FPU допускает и обратные (Reverse) формы таких команд.
Многие команды допускают несколько форм задания операндов,
которые при этом принято записывать через слэш «/», например
FADD //src/dst,src .
Эта запись подразумевает три возможные формы команды: без операндов, с
одним операндом, с двумя операндами.
src – Source — источник;
dst – Destionation – получатель.
В мнемониках команд FPU приняты следующие соглашения:
• первая буква команды всегда F (только команды FPU начинаются с F);
• вторая буква I обозначает операцию с целым двоичным числом из
памяти, буква B – операцию с десятичным числом из памяти, без этих
букв – вещественное число;
• предпоследняя или последняя буква R указывает обратную операцию
(для вычитания или деления);
• последняя буква P идентифицирует команду, заключительным
действием которой является извлечение из стека.
Рассмотрим машинный формат команд.
Для команд FPU существует пять различных форматов кодирования
(рис. 4.17), однако в любом формате старшие пять битов двухбайтного кода
команды FPU всегда содержит специальное значение 11011, по которому
процессор распознает команды FPU.
Команда Доп.
поле
Первый байт Второй байт
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 0 1 1 OP1 1 Mod 1 OP2 R/m sib Disp
1 1 0 1 1 MF
OP1
Mod OP2 R/m sib Disp
73