Never divide by a constant! Dividing by 5 can be done as a multiplication by 0.3333 hex, i.e. a multiplication by 3 * 17 * 257 followed by a right shift by 16. If you need more precision, just add more factors. Multiplication in turn is done by a hardcoded sequence of shifts and adds.
Yep, for the nand2tetris course, we had division, but it was in the OS, and a really expensive operation. I wrote a program that needed to know which third of a line a point was on. (i.e. identify 4 on a 15-length line as being in the first third).
I naively wanted to do something like "if x < L / 3", but rearranged it to "if x * 3 < L". (Of course, the language only supported integers and not fractions or floating point, so I needed to do that anyway.)
Oh, right. I'm an idiot who forgot about the fixed point divide.
And yes, at some point you are going to need to do a divide by constant 10. It's unavoidable if you want a base 10 display. The option of using BCD to do calculations just lets you do that divide upfront, rather than at the end.
Also, this optimization is performed by any half-decent compiler. Of course, if you're on embedded, you may not have a half-decent compiler, or indeed an compiler at all.