У меня возникли проблемы с пониманием того, как получить результат вычисления, выполненного с использованием сопроцессора Intel x86.Вопросы сборки сопроцессора Intel x86
Обратите внимание на следующий сегмент данных.
и следующие сегменты кода, версия 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)?
Спасибо.
Спасибо. Что объясняет его. Пожалуйста, уделите немного времени, чтобы ответить на другую часть вопроса: есть ли способ преобразовать его обратно в 8.4, чтобы я мог распечатать его на консоли? Благодарю. – nunos
Ну ... как бы я это сделал в C, было бы назвать printf (% f, x). В какой библиотеке вы используете? Возможно, есть функция, чтобы преобразовать ее для вас. – CookieOfFortune
Как упоминалось в сообщении, я использую masm32. Я не знаю, но, возможно, есть функция masm32, например dwtoa, но для плавающих, которые могут это сделать. – nunos