Разделение longfloat и int в сборке x86-64

У меня есть программа, в которой я зацикливаюсь, пока пользователь вводит Y (да). Затем пользователь вводит данные типа long float. У меня также есть счетчик r14, который будет считать каждый раз, когда они вводят длинное число с плавающей запятой. После завершения цикла я хочу вычислить среднее значение. если я сделаю это:

fld tword [r14]

и отобразите его, я получу ошибку сегментации. Я тоже пробовал кучу других вещей, но это всегда дает мне сегмент. Ошибка после попытки разделить и отобразить. Я думаю, проблема в том, что r14 - это int, и я не могу вот так поместить его в стек FPU и разделить. Но я не могу понять другой способ.

может кто-нибудь помочь, пожалуйста? Заранее спасибо.


person vap    schedule 22.02.2013    source источник
comment
возможный дубликат Как преобразовать целое число в значение с плавающей запятой в x86 ASM?   -  person tc.    schedule 22.02.2013


Ответы (1)


Инструкции FPU берут свои аргументы либо из памяти, либо из регистров FPU, но не из регистров ЦП общего назначения.

fld tword [r14] берет tword из ячейки памяти по адресу, содержащемуся в r14, и помещает его поверх стека FPU.

Если r14 не указывает на ячейку памяти, из которой можно прочитать 10-байтовое значение с плавающей запятой, возникает ошибка сегментации.

Итак, сохраните свой float в памяти и прочитайте его оттуда с помощью fld.

person Alexey Frunze    schedule 22.02.2013
comment
я не совсем понимаю. я уже загрузил свой поплавок с помощью fld, находясь внутри цикла. но он не будет выполнять операцию деления со счетчиком. есть ли другой способ, например, fild, который я должен загрузить? - person vap; 22.02.2013