Чтобы умножить числа повышенной точности, придется вспомнить правила умножения десятичных чисел в столбик: множимое умножают на каждую цифру множителя, сдвигают влево на соответствующее число разрядов и затем складывают полученные результаты. В нашем случае роль цифр будут играть байты, слова или двойные слова, а сложение должно выполняться по правилам сложения чисел повышенной точности. Алгоритм умножения оказывается заметно сложнее, поэтому умножим для примера только 64-битные числа:
; беззнаковое умножение двух 64-битных чисел (X и Y) и сохранение
; результата в 128-битное число Z
mov eax,dword ptr X
mov ebx,eax
mul dword ptr Y ; перемножить младшие двойные слова
mov dword ptr Z,eax ; сохранить младшее слово произведения
mov ecx,edx ; сохранить старшее двойное слово
mov eax,ebx ; младшее слово "X" в еах
mul dword ptr Y[4] ; умножить младшее слово на старшее
add еах,есх
adc edx,0 ; добавить перенос
mov ebx,eax ; сохранить частичное произведение
mov ecx,edx
mov eax,dword ptr X[4]
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,0 ; и добавить перенос
mov word ptr Z[8],eax
mov word ptr Z[12],edx
Чтобы выполнить умножение со знаком, потребуется сначала определить знаки множителей, изменить знаки отрицательных множителей, выполнить обычное умножение и изменить знак результата, если знаки множителей были разными.