Ub5_A1.s Bubble Sort

Help Contents DLX-Beispielprogramme Ub5_A1.s Bubble Sort
Ub4_A4.s Fuellt Speicher Ub5_A2a.s Division mit Rest 1

Ub5_A1.s Bubble Sort

; Systemnahe Informatik 2004 Uebung 5 Aufgabe 1
; Bubble Sort
		.data
Feldbeginn:	.word 7
		.word 4
		.word 6
		.word 2
		.word 8
		.word 5
		.word 9
		.word 1
		.word 10
		.word 3
Feldende:	.space 4
; // In C++ schaut Bubble sort so aus:
; #include < iostream >
;
; using namespace std;
;
; int
; 	f[10]={7,4,6,2,8,5,9,1,10,3},
; 	*Feldbeginn=f,
; 	*Feldende=Feldbeginn+10;
;
; void main()
; {
;   int n=Feldende-Feldbeginn-1;
;   for (int i=0; i < n; i++)		//>
;   { int *a=Feldbeginn,
;         *b=a+1;
;     for (int j=0; j < n-i; j++) //>
;     { if (*b < *a)      // compare the two neighbors >
;       { int tmp = *a;   // swap *a and *b
;         *a = *b;
;         *b = tmp;
;       }
;       a++;
;       b++;
;     }
;     for (j=0; j < n+1; j++)
;       cout << f[j] << " ";	// >>>>
;     cout << endl;
;   }
; }
		.text
		addi r1,r0,Feldende
		subi r1,r1,Feldbeginn
		srl r1,r1,2		; die ptr müssen zuerst
					; durch 4 dividiert werden
		subi r1,r1,1		; r1=n

		add r2,r0,r0		; r2=i=0
for_i:		slt r3,r2,r1		; r3=(i < n) //>
		beqz r3,end_i
		addi r3,r0,Feldbeginn	; r3=a=Feldbeginn
		addi r4,r3,4		; r4=b=a+1

		add r5,r0,r0		; r5=j=0
for_j:		sub r6,r1,r2		; r6=n-i
		slt r6,r5,r6		; r6=(j < n-i) //>
		beqz r6,end_j

		lw r6,(r3)		; r6=*a
		lw r7,(r4)		; r7=*b
		slt r8,r7,r6		; r8=(*b < *a) //>
		beqz r8,if_end
		sw (r3),r7		; *a=r7 (swap *a und *b)
		sw (r4),r6		; *b=r6

if_end:		addi r3,r3,4		; a++
		addi r4,r4,4		; b++
		addi r5,r5,1		; j++
		j for_j

end_j:		addi r2,r2,1		; i++
		j for_i

end_i:		trap 0

Ub4_A4.s Fuellt Speicher Ub5_A2a.s Division mit Rest 1