Assembler Beispiel Division

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Der 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