Groesster gemeinsamer Teiler

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

Groesster gemeinsamer Teiler

In diesem Beispiel soll die Verwendung zweier Module gezeigt werden. Ferner werden Werte vom Standard-Input eingelesen, und das Ergebnis soll am Standard-Output letztendlich ausgegeben werden.

Das Listing zur GGT-Berechnung (GGT.S)

;*********** WINDLX Bsp. 1: Grösster gemeinsamer Teiler *************
;*********** (c) 1991 Günther Raidl *************

;------------------------------------------------------------------------
; benoetigt Modul INPUT.
; Programmanfang bei Symbol main
; Liest zwei positive, ganzzahlige Werte von stdin ein, berechnet den ggT
; und gibt das Ergebnis auf stdout aus
;------------------------------------------------------------------------

	.data

	;*** Prompts für Parametereingabe
Prompt1:	.asciiz	"Erster Wert: "
Prompt2:	.asciiz	"Zweiter Wert: "

		;*** Daten für printf-Trap
PrintfFormat:	.asciiz	"ggT=%d\n\n"
	.align	2
PrintfPar:	.word	PrintfFormat
PrintfValue:	.space	4

	.text
	.global	main
main:
	;*** Zwei ganzzahlige, positive Werte in R1 und R2 einlesen
	addi	r1,r0,Prompt1
	jal	InputUnsigned	;Uns.-Integer in R1 einlesen
	add	r2,r1,r0	;R2 := R1
	addi	r1,r0,Prompt2
	jal	InputUnsigned	;Uns.-Integer in R1 einlesen

Loop:	;*** Ist R1 oder R2 groesser oder sind beide gleich?

seq	r3,r1,r2	;R1 == R2 ?
	bnez	r3,Result
	sgt	r3,r1,r2	;R1 > R2 ?
	bnez	r3,r1Greater

r2Greater:	;*** r1 von r2 subtrahieren
	sub	r2,r2,r1
	j	Loop

r1Greater:	;*** r2 von r1 subtrahieren
	sub	r1,r1,r2
	j	Loop

Result:	;*** Ergebnis (R1) ausgeben
	sw	PrintfValue,r1
	addi	r14,r0,PrintfPar
	trap	5

	;*** Programmende
	trap	0

Dieses Programm ist zum leichteren Verständnis kurz gehalten und berücksichtigt daher keine ungültigen Zeichen bei der Eingabe!

DLX-Beispielprogramme INPUT.S