2013-02-22 5 views
0

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

fld tword [r14] 

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

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

+0

Возможный дубликат [Как преобразовать целое число в значение с плавающей запятой в x86 ASM?] (Http://stackoverflow.com/questions/3027424/how-to-convert-an-integer-to-a-floating -point-value-in-x86-asm) –

ответ

0

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

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

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

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

+0

Я не совсем понимаю. Я уже загрузил свой float с fld, находясь внутри цикла. но он не будет выполнять операцию деления со счетчиком. есть ли другой способ, как fild, который я должен загрузить? – vap

+0

Покажите нам свой код, а не только одну инструкцию. –