Nur generell mal einige Optimierungen, die mir so ins Auge springen ...
Wieso wird das Ergebnis auf 3 Bytes aufgeteilt? Bei 8 Durchläufen, kann es nur max 8 Bit umfassen. Wenn man mehr "Dezimalstellen" im Ergebnis haben möchte, muss man den "Rest" weiter zerteilen und das die Schleife etwa auf 16 oder 24 Bit ausweiten. Dann ergäbe das einen Sinn.
Nach 8 Durchläufen ist der Dividend natürlich komplett rausgeschoben und man müsste diesen dann nicht mehr ständig mitrotieren ... in so einem Fall könnte man sich da auch was überlegen, etwa eine 2. Schleife für Bit 9 bis 15 (oder 23).
Aber zu den Optimierungen an sich:
* X als Bitzähler kann man sich sparen, wenn man im Result-Byte res einfach Bit 0 zu Beginn setzt und dann dieses Bit dann nach dem 8 ROL beim Carry angelangt ist, dann ist das Carry-Flag gestetzt und wir haben 8 Durchläufte.
* tmp kann man sich auch sparen, wenn man gleich den Akku dafür verwendet.