Beiträge von JeeK im Thema „Dividieren - here we go again!“

    Nur generell mal einige Optimierungen, die mir so ins Auge springen ...

    Code
                lda #$01
                sta res
    loop        asl dvd
                rol
                cmp dvs
                bcc skip
                sbc dvs
    skip        rol res
                bcc loop

    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.