1.Klausur 2004 Aufgabe 1 - n over k

Help Contents DLX-Beispielprogramme 1.Klausur 2004 Aufgabe 1 - n over k
Ub5_A3.s Quersumme

1.Klausur 2004 Aufgabe 1 - n over k

; Systemnahe Informatik 2004 1.Klausur Aufgabe 1
; berechnet (n über k)=n!/((n-k)!*k!)

	.data
nPrompt:.asciiz "n = "
kPrompt:.asciiz "k = "
Format:	.asciiz "%d über %d = %f"
	.align 2
Output:	.word Format
n:	.space 4
k:	.space 4
nüberk:	.space 8

	.text
	.global Main
Main:	addi r1,r0,nPrompt
	jal InputUnsigned
	sw n,r1
	add r10,r1,r0

	addi r1,r0,kPrompt
	jal InputUnsigned
	sw k,r1
	add r11,r1,r0

	add r2,r10,r0
	add r1,r10,r0
	addi r1,r1,1
	sub r1,r1,r11
	jal Produkt
	add r12,r1,r0	; r12=(n-k+1)*..*(n-1)*n=Zähler
	addi r1,r0,1
	add r2,r11,r0
	jal Produkt	; r1=k!=Nenner

	movi2fp f0,r12
	movi2fp f2,r1
	cvti2d f0,f0
	cvti2d f2,f2
	divd f0,f0,f2
	sd nüberk,f0

	addi r14,r0,Output
	trap 5
	trap 0

; Produkt berechnet r1*(r1+1)*...*(r2-1)*r2, Ergebnis in r1.
	.data
s3:	.space 4

	.text
Produkt:
	sw s3,r3
	movi2fp f0,r1
	movi2fp f2,r2
	addi r3,r0,1
	movi2fp f4,r3
	cvti2d f0,f0
	cvti2d f2,f2
	cvti2d f4,f4
	movd f6,f4
ploop:	multd f6,f6,f0
	addd f0,f0,f4
	addi r1,r1,1
	sle r3,r1,r2
	bnez r3,ploop
	cvtd2i f6,f6
	movfp2i r1,f6
	lw r3,s3
	jr r31

Ub5_A3.s Quersumme