Как организовать правильное знаковое перемножение (imul) ТРЁХ чисел, если при произведении первого числа на второе число заполняется не только eax, но и более старшие разряды edx, и как теперь это умножить на третье число??? Если опять использовать imul eax, то мы не учтём старших разрядов. Тот же вопрос и про вычетание числа < 32 бит из ПАРЫ регистров.
Правильно ли я полагаю, что нужно скопировать содержимое edx куда-то (например push edx), произвести перемножение с третьим числом, а затем перемножить бывшее значение edx с третьим множителем и прибавить этот результат к edx. ??
imul наводит на мысль о том, что числа со знаком.. в таком случае данная схема не будет работать. легче ФПУ в данном случае действительно, чем загоняцо следить за разрядностью и знаком числа
знак что-то меняет? Как я понимаю знак - это самый старшый разряд обоих регистров, так? Надо будет разобраться, будет ли этот старший разряд переписываться, в случаи, когда в него по правилам суммирования должна занестись +1 (т.е. перенос в старший разряд при сложении)
Antolflash Хочешь 64 бита используешь пару регистров, не хочешь используешь 32 бита. Не так. Отрицательные числа хроняться в дополнителном коде. Поэтому изминения знака neg меняет не только старший разряд но и все.
Не могу я в голове удержать алгоритм куда-что сохранять и домножать со сложением, так что обойдутся умножением с произведением в пределе 32бит, в дальнейшем изучу FPU.
Чего там "изучать" то, 3 инструкции ? Code (Text): fild a ;грузим 1-е fimul b ;умнож. на 2-е fimul c ;умнож. на 3-е fistp q ;сохраняем результат