Дополнительные математические инструкции FPU

Последнее обновление: 02.07.2023

fsqrt

Инструкция 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

Инструкция frndint округляет число на вершине стека до целого в соответствии с битами округления в регистре управления FPU. При этом результат округления остается в верхушке стека и по прежнему представляет число с плавающей точкой, просто без дробной части.

fabs

Инструкция 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

Инструкция 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
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850