; 128-битовите числа без знак в регистри RCX:RDX (Y1:Y0) и RSI:RDI (Z1:Z0) да се ; умножат и 256-битовият резултат да се върне в рег. RCX:RDX:RSI:RDI (A:B:C:D). ; Алгоритъм: Peter Norton, "Advanced Assembly Language", 1991, стр. 229-230 option prologue:none, epilogue:none .code umul128 proc MOV R10,RDI ; Z0 MULX R9,RAX,RSI ; R9:RAX = Z1 * Y0 MULX R8,RDI,RDI ; R8:RDI = Z0 * Y0 MOV RDX,RCX ; Y1 MULX RCX,R11,RSI; RCX:R11 = Z1 * Y1 MULX RDX,RSI,R10; RDX:RSI = Z0 * Y1 ADD RSI,R8 ; C = ст.д.(Z0 * Y0) + мл.д.(Z0 * Y1) ADC RDX,R9 ; B = ст.д.(Z0 * Y1) + ст.д.(Z1 * Y0) ADC RCX,0 ; A = ст.д.(Z1 * Y1) ADD RSI,RAX ; C = ст.д.(Z0 * Y0) + мл.д.(Z0 * Y1) + мл.д.(Z1 * Y0) ADC RDX,R11 ; B = ст.д.(Z0 * Y1) + ст.д.(Z1 * Y0) + мл.д.(Z1 * Y1) ADC RCX,0 RET umul128 endp end