Assembler Beispiel Division
Aus C64-Wiki
Zur Navigation springenZur Suche springenDer Ausschnitt zeigt ein Byte als Dezimalzahl an. Anschaulich auch die Divisionsroutine. Diese lässt sich recht einfach für andere Divisoren anpassen (dieser Code wurde von Hannenz' Seite geliftet).
; ** 8-Bit-Zahl zu ASCII ldx #0 ;X zählt die Stellen loop jsr div10 ;Akku durch 10 pha ;Rest auf den Stack inx ;Stellenzähler erhöhen tya ;Ergebnis auf 0 testen und übernehmen bne loop ;nicht 0, dann weitermachen loop2 pla ;alle Stellen wieder vom Stack holen (umgekehrte Reihenfolge) ora #$30 ;zu Ziffer umwandeln jsr $ffd2 ;ausgeben dex ;Stellenzähler läuft diesmal rückwärts bne loop2 :wenn 0, dann sind alle Stellen ausgegeben rts div10 sec ;billige Divisionsroutine /10 (A: Dividend -> A: Quotient, Y: Rest) ldy #$ff ;Y mit 0 init., zählt das Ergebnis der Division divlp iny ;jetzt ist er null sbc #10 ;10 subtrahieren (Carry ist immer gesetzt) bcs divlp ;solange Akku größer als 10 ist adc #10 ;war kleiner als 10, negativen Wert korrigieren, damit der "Rest" stimmt! rts