INPUT.S

Help Contents DLX-Beispielprogramme INPUT.S
Groesster gemeinsamer Teiler Faktoriellenberechnung

INPUT.S

Das Listing des Hilfsmoduls INPUT.S

;*********** WINDLX Bsp. 1: Einlesen eines pos. Integerwerts *************
;*********** (c) 1991 Günther Raidl *************

;-----------------------------------------------------------------------------
;Unterprogrammaufruf bei Symbol InputUnsigned
;Erwartet in R1 die Adresse eines mit 0 abgeschlossenen Prompt-Strings
;Liefert in R1 den eingelesenen, positiven Integerwert zurueck.
;Veraendert die Register R1, R13, R14
;-----------------------------------------------------------------------------

	.data

	;*** Daten für Read-Trap
ReadBuffer:	.space	80
ReadPar:	.word	0,ReadBuffer,80

	;*** Daten für Printf-Trap
PrintfPar:	.space	4

SaveR2:	.space	4
SaveR3:	.space	4
SaveR4:	.space	4
SaveR5:	.space	4


	.text

	.global	InputUnsigned
InputUnsigned:
	;*** Registerwerte sichern
	sw	SaveR2,r2
	sw	SaveR3,r3
	sw	SaveR4,r4
	sw	SaveR5,r5

	;*** Prompt ausgeben
	sw	PrintfPar,r1

	addi	r14,r0,PrintfPar
	trap	5

	;*** Trap-3 zum Einlesen einer Zeile aufrufen
	addi	r14,r0,ReadPar
	trap	3

	;*** Zahl ermitteln
	addi	r2,r0,ReadBuffer
	addi	r1,r0,0
	addi	r4,r0,10	;Dezimalsystem

Loop:	;*** Bis das Zeilenende erkannt wird Zeichen als Ziffern beh.
	lbu	r3,0(r2)
	seqi	r5,r3,10	;LF -> Exit
	bnez	r5,Finish
	subi	r3,r3,48	;'0'
	multu	r1,r1,r4	;Shift um eine Dezimalstelle
	add	r1,r1,r3	;Neue Einerstelle hinzu
	addi	r2,r2,1	;Zeichenpointer inkrem.
	j	Loop

Finish:		;*** Alte Registerwerte laden und zurueck
	lw	r2,SaveR2
	lw	r3,SaveR3
	lw	r4,SaveR4
	lw	r5,SaveR5
	jr	r31	; Return

Examples:

References:

Groesster gemeinsamer Teiler Faktoriellenberechnung