Вы можете разделить любое число длины на 32-битное число с последовательными делениями, используя остаток от предыдущего деления как наиболее значимые 32 бита делимого для следующего деления, аналогично делению на длинные руки
Обратите внимание, что мне нужно исправить этот код для обработки отрицательных делителей, но он должен работать с положительными делителями и знаковыми дивидендами.
Обратите внимание, что этот код округляет в сторону отрицательной бесконечности: -10/3: quotient = -4, остаток = +2.Для обработки отрицательных делителей код может отрицать как делитель, так и делимое, а затем отрицать остаток после.
mov ecx,000000003h ;ecx = signed dvsr (must be positive)
mov edi,0fedcba98h ;edi:esi = signed dvnd
mov esi,076543210h
;; inputs
mov eax,edi ;eax = upper 32 bits dvnd
cdq ; sign-extend that into EDX:EAX
idiv ecx
test edx,edx ;br if sign rmdr == sign dvsr
jns short div0
dec eax ;dec quot
add edx,ecx ;rem += dvsr
div0: mov edi,eax ;edi = upper 32 bits quot
mov eax,esi ;eax = lower 32 bits dvnd
div ecx
mov esi,eax ;esi = lower 32 bits quot
; ;edx = remainder