ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
28 июля
1254312 Топик полностью
Adept (30.10.2022 21:18, просмотров: 145) ответил Adept на кстати, легко :)
о пользе праздного времяпрепровождения в конфе :) 

таки полезная оказывается подпрограммка :)) оформил макросом.

Иногда такое нужно (и часто оно оказывается быстрее настоящего алгоритма деления :))

добавив ещё пару-тройку команд, можно получать и остаток, например в регистре делителя :)

всегда чурался подобных алгоритмов "в лоб", но однакож, задумался... на кварце 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
...делать нужно так, как нужно. А как ненужно - делать не нужно (С) Винни-Пух :)