Как 64-битная математика достигается на 32-битной машине? - PullRequest
6 голосов
/ 07 июля 2010

Если 32-разрядный процессор действительно имеет длину всего 32 бита, то как математические операции могут работать с 64-разрядными числами? Например:

long lngTemp1 = 123456789123;
long lngTemp2 = lngTemp1 * 123;

Согласно MSDN, длинным в C # является 64-битное число со знаком: http://msdn.microsoft.com/en-us/library/ctetwysk(VS.71).aspx

Как получается, что 32-разрядный микропроцессор Intel может выполнять код, как описано выше, без переполнения?

Ответы [ 3 ]

3 голосов
/ 07 июля 2010

Они используют бит переноса для сложения и вычитания. Операции ассемблера для «сложения с переносом» и «вычитания с переносом» (или «заимствования») могут использоваться для сложения и вычитания произвольной длины битов с расширенной точностью.

Для умножения, если у вас есть только 32-битный результат от умножения, вы можете разбить его на 16-битные пары значений и умножить, а затем сдвинуть и сложить (с переносом), чтобы получить полный 64-битный результат из 32- бит умножить. По сути, использование длинной версии (любые два 16-разрядных умножения соответствуют 32-разрядному результату) можно использовать для генерации произвольных умножений на длину в битах с использованием более ограниченной точности.

FWIW, 32-битная команда Intel asm 'mul' может помещать 64-битный результат в EDX: EAX, так что вы можете делать умножения на 32-битные блоки (с добавлением 64-битных значений), а не на 16-битные битовые блоки (с 32-битными значениями для сдвига и добавления).

0 голосов
/ 07 июля 2010

Даже 32-разрядные процессоры часто поставляются с 64-разрядными модулями с плавающей запятой, но данные могут быть одновременно загружены только в 32-разрядные.может быть выполнено, даже если базовый процессор разрешает только 8-битные целочисленные операции.Однако компилятор или программист должен будет вставить достаточный код для виртуализации эффекта.

0 голосов
/ 07 июля 2010

32-битный набор команд x86 может использоваться для 64-битной арифметики, см. Расширенное умножение точности .

...