попробую. Для деления с округлением к нулю отрицательного 16-разрядного числа на 2 на AVR получается всего 4 команды. Дополнил для чисел большей разрядности и арифметического округления к ближайшему целому Число в Rhigh Rlow
ASR Rhigh
ROR Rlow
BRCC m1
ADIW Rlow, 1
m1:
Здесь при разрядности больше 16 вместо ADIW, а также на МК без такой команды (8080, 51 и т.п.) может использоваться последовательность типа такой:
ADD Rlow, 1
ADC Rhigh, 0
Деление на 4 и больше:
EOR Rtmp,Rtmp ; XOR
ASR Rhigh
ROR Rlow
ROR Rtmp
...
ASR Rhigh
ROR Rlow
ROR Rtmp
BREQ m1
ADIW Rlow, 1
m1:
Деление на 2 в степени, задаваемой регистром Rs
EOR Rtmp,Rtmp ; XOR
m2:
ASR Rhigh
ROR Rlow
ROR Rtmp
DEC Rs
BRNE m2
TST Rtmp
BREQ m1
ADIW Rlow, 1
m1:
Для деления с арифметическим округлением (т.е. к ближайшему целому)
http://caxapa.ru/381304.html получается ещё проще, и работает независимо от знака исходного числа, а также без условного перехода:
; повторять нужное число раз
ASR Rhigh
ROR Rlow
; этот фрагмент
EOR Rtmp,Rtmp
ADC Rlow, Rtmp
ADC Rhigh, Rtmp
То же самое для 32-разрядного числа в регистрах Ra Rb Rc Rd, где Ra младший:
; повторять нужное число раз
ASR Rd
ROR Rc
ROR Rb
ROR Ra
; этот фрагмент
EOR Rtmp,Rtmp
ADC Ra, Rtmp
ADC Rb, Rtmp
ADC Rc, Rtmp
ADC Rd, Rtmp
Деление на 2 в степени, задаваемой регистром Rs
m2:
ASR Rd
ROR Rc
ROR Rb
ROR Ra
DEC Rs ; флаг С не изменяется
BRNE m2 ; флаг С не изменяется
EOR Rtmp,Rtmp ; флаг С не изменяется
ADC Ra, Rtmp
ADC Rb, Rtmp
ADC Rc, Rtmp
ADC Rd, Rtmp
Могу развить тему для некоторых других архитектур, только не вижу смысла