Инструкция fsqrt вычисляет квадратный корень значения на вершине стрека и заменяет ST(0) этим результатом. Значение для вычисления корня должно быть 0 или положительным, иначе fsqrt сгенерирует исключение недопустимой операции.
.data st0 real8 16.0 result dword ? .code main proc fld st0 fsqrt ; ST(0) = корень числа из ST(0) fistp result mov eax, result ; EAX = 4 ret main endp end
Инструкция frndint округляет число на вершине стека до целого в соответствии с битами округления в регистре управления FPU. При этом результат округления остается в верхушке стека и по прежнему представляет число с плавающей точкой, просто без дробной части.
Инструкция fabs вычисляет абсолютное значение в регистре ST(0) путем сброса знакового бита.
.data st0 real8 -16.0 result dword ? .code main proc fld st0 fabs ; ST(0) = 16 fistp result mov eax, result ; EAX = 16 ret main endp end
Инструкция fchs инвертирует знаковый бит (фактически эквивалентно умножению на -1):
.data st0 real8 2.0 result dword ? .code main proc fld st0 fchs ; ST(0) = 2 * -1 = -2 fistp result mov eax, result ; EAX = -2 ret main endp end