Пример? - да не вопрос. Классика деления это примерно то что мы учили в школи, деление в столбик, примерно так и делает контроллер. Например нужно поделить число 117 на 13. И так имеем делимое, делитель и остаток. остаток в процессе деления может быть равным нулю, если число полностью делится. Далее, загружается цикл на число разрядов делимого. для 117 возьмём 8, ибо речь в данной ветке о 8-ми разрядниках. Со стороны старшего бита делимого подставляется заблаговременно очишенный остаток. После каждого сдвига сравниваются делитель и остаток, если делитель ›= остатку, то от остатка отнимается делитель и в делимом устанавливается в "1" младший бит, иначе ничего не делается, снова просто сдвигаем, пока не выйдут 8 циклов, поехали:
117 в dec-е 0b01110101
Слева от делимого подставляем чистый остаток
0b00000000:0b01110101
сдвиг влево №1:
0b00000000:0b11101010
делитель больше или равен остатку? - нет, ничего не делаем, двигаем сдвиг влево №2:
0b00000001:0b11010100
больше или равен? - нет
сдвиг влево №3:
0b00000011:0b10101000
больше или равен? - нет
сдвиг влево №4:
0b00000111:0b01010000
больше или равен? - нет
сдвиг влево №5:
0b00001110:0b10100000
больше или равен? - да, отнимаем от 0b00001110 (14dec) 0b00001101 (13) в остатке остаётся 1, и 1 ставим в делимом:
0b00000001:0b10100001
сдвиг влево №6:
0b00000011:0b01000010
больше или равен? - нет
сдвиг влево №7:
0b00000110:0b10000100
больше или равен? - нет
сдвиг влево №8:
0b00001101:0b00001000
больше или равен? - да, отнимаем от 0b00001101 (13dec) 0b00001101 (13) в остатке остаётся 1, и 1 ставим в делимом:
0b00000000:0b00001001
В итоге в делимом результат, число 9, в остатке 0. Это классика деления, так работают и аппаратные делители, только с некоторыми ухищрениями что-бы ускорить этот процесс.
Я применяю такое быстрое деление через умножение (просто я хотел увидеть Ваш вариант в виде алгоритма). Нужно число быстро разделить на 10 к примеру:
Делимое 170, делитель 10. Если число 256 на калькуляторе разделить на 10, то получим число 25,6 ~= 26. Эта и есть та константа которая поможет делить.
Перемножаем 170 на 26 = 4420, рассмотрим это число в hex 0x1144. Выбросим младшую часть числа, имеем 0x11 переведём в dec - 17. Это мой метод быстрого деления чисел.
В асме это выглядит так:
ldi r16,170;загрузить делимое 1 такт
ldi r17,(256/10);загрузить константу 1 такт
mul r16,r17 ;перемножить 2 такта
В регистре r1 результат, число 17, Всего 4 такта, против исходного стандартного метода 74 такта. Не кисло, правда?