У меня возникли некоторые проблемы с пониманием того, как получить результат вычисления, выполненного с использованием сопроцессора Intel x86.
Пожалуйста, рассмотрите следующий сегмент данных.
.data
res real4 ?
x real4 5.0
k real4 3.4
и следующий кодсегменты, версия 1 :
.code
main:
fld x ; 5.0
fadd k1 ; 5.0 + 3.4
fistp res ; store as integer (it will round, in this case down)
mov eax, res ; eax = 00000008
end main
и версия 2 :
.code
main:
fld x ; 5.0
fadd k ; 5.0 + 3.4
fstp res ; store as real
mov eax, res ; eax = 41066666
end main
Я понимаю версия 1 ,без проблем.
Это версия 2 Я не понимаю.Я вижу в отладчике, что он выполняет точные вычисления, как в версии 1, но когда приходит время для сохранения, он делает это как «41066666» !?
В чем причина этого?
Какое "кодирование" использовалось для преобразования 8.4 в "41066666"?
Есть ли способ преобразовать его обратно в 8.4, чтобы я мог его распечататьв консоли (например, с помощью функции библиотеки StdOut masm32)?
Спасибо.