64/32 деление поддерживается напрямую i386 и, возможно, другими машинами, если старшее слово дивиденда меньше делителя (т.е. дивиденд находится в диапазоне 32x32-> 64, умноженного на делитель),Если ваш компилятор имеет минимальную поддержку для 64-битных типов, он может распознать эту ситуацию и воспользоваться ею.
Предполагая, что вы уже проверили сгенерированный asm и обнаружили, что он этим не пользуется, или если вы знаете, что у вашего процессора нет такой инструкции по разделению, то вам просто нужно провести длительное разделение, как вы учили в начальной школе ... за исключением того, что это base-4294967296 вместо base-10.
Выможет попытаться прочитать исходный код в libgcc
, поскольку он содержит код для разделения 64/64 для машин, у которых нет встроенной поддержки.
Редактировать: На самом деле, поскольку у вас нет деления 64/32операция, вы можете использовать base-65536.Это связано с тем, что наивное длинное деление требует деления двухзначного числа на однозначное число на каждом шаге.Конечно, теперь вы застряли, делая больше шагов ..