Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > fmul не работает


Автор: kurlyak 24.6.2012, 10:53
Вобщим пишу ассемблерную вставку для программы на Си++:

Код

void MultyFloat(float *val1, float *val2, float * valRes)
{
_asm
{
MOV EDI, val1
MOV ESI, val2
MOV EBX, valRes


MOV EAX, [EDI]
MOV EDX, [ESI]
FMUL 
MOV [EBX] ,EAX
}
}


Функция не умножает два числа с плавающей точкой. Хотя эта же функция, когда я ее переделываю под целые цисла и пишу вместо FMUL пишу IMUL все работает. Кто знает подскажите.

Автор: LeonidPr 24.6.2012, 11:35
fmul - это инструкция сопроцессора и работает она с регистрами сопроцессора а не основными регистрами проца. Вот http://www.lib.csu.ru/dl/bases/prg/frolov/books/bsp/v02/ch12.htm почитайте подробнее. Я сам не программил сопроцессор на асме, только теорию знаю, поэтому примером кода не могу помочь.

Автор: Mikl_ 8.10.2012, 03:10
Код

void MultyFloat(float *val1, float *val2, float * valRes)
{
_asm
{ finit
MOV EDI, val1
MOV ESI, val2
MOV EBX, valRes
fld dword ptr [EDI]
fld dword ptr [ESI]
FMUL 
fstp dword ptr [EBX]
}
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)