5.4.3. Умножение

Чтобы умножить числа повышенной точности, придется вспомнить правила умножения десятичных чисел в столбик: множимое умножают на каждую цифру множителя, сдвигают влево на соответствующее число разрядов и затем склады­вают полученные результаты. В нашем случае роль цифр будут играть байты, сло­ва или двойные слова, а сложение должно выполняться по правилам сложения чисел повышенной точности. Алгоритм умножения оказывается заметно сложнее, поэтому умножим для примера только 64-битные числа:

;   Беззнаковое умножение двух 64-битных чисел  (X и Y)  и сохранение ;   результата в 128-битное число Z.

mov

ptr X

 

mov

ebx,еах

 

mul

dword ptr Y

Перемножить младшие двойные слова.

mov

dword ptr Z, еах

Сохранить младшее слово произведения

mov

ecx,edx

Сохранить старшее двойное слово. '

mov

еах,ebx

Младшее слово "X"  в еах.

mul

dword ptr Y[4]

Умножить младшее слово на старшее.

add

eax,ecx

 

adc

edx.O

Добавить перенос.

mov

ebx,eax

Сохранить частичное произведение.

mov

ecx,edx

 

mov

ptr

 

mul

dword ptr Y

Умножить старшее слово на

add

eax,ebx

Сложить с частичным

mov

dword ptr Z[4],eax

 

adc

ecx,edx

 

mov

eax.dword ptr X[4]

 

mul

dword ptr Y[4]

Умножить старшие слова.

add

eax,ecx

Сложить с частичным

adc

edx.O

и добавить перенос.

mov

word ptr

 

mov

word ptr Z[12],edx

 

Для выполнения умножения со знаком потребуется сначала определить знаки множителей, изменить знаки отрицательных множителей, выполнить обычное умножение и изменить знак результата, если знаки множителей были разными.