о пользе праздного времяпрепровождения в конфе :)
...делать нужно так, как нужно. А как ненужно - делать не нужно (С) Винни-Пух :)
таки полезная оказывается подпрограммка :)) оформил макросом.
Иногда такое нужно (и часто оно оказывается быстрее настоящего алгоритма деления :))
добавив ещё пару-тройку команд, можно получать и остаток, например в регистре делителя :)
всегда чурался подобных алгоритмов "в лоб", но однакож, задумался... на кварце 14..16МГц и наихудшем условии (делимое 256, делитель 1) время исполнения примерно ~1000 тактов т.е. примерно 14-16тыс делений/сек (!) Однако ж ! Реально в подавляющем большинстве случаев можно спокойно юзать, и будет вполне приемлемо по скорости и компактно :) Даж для какого-нить ШИМ-управления чем-нибудь в реалтайме сгодится :)
;Макрос циклического деления 8 битного аргумента вычитанием ;исходные данные - любой регистр, кроме TMP ;делитель - любой регистр, кроме TMP ;результат - исходный регистр ;регистр TMP используется для текущих операций ;Синтаксис: ; Div8_RegByReg Reg1,Reg2 ;где Reg1 - делимое (любой регистр кроме TMP) ; ; Reg2 - делитель(любой регистр кроме TMP) ; ;результат - в Reg1 ;29/X.22 .macro Div8_RegByReg clr TMP ;очистка промежуточного рабочего регистра mDiv8_cycle: ;делим в цикле вычитанием sub @0,@1 brcs mDiv8_exit inc TMP rjmp mDiv8_cycle mDiv8_exit: mov @0,TMP ;поместим результата в регистр делимого .endmacro