[Назад] [Далее]

5.4.3. Умножение

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

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


п»ї
"target=_blank><\/a>") //-->