//wir benutzen acht register.... DEFREG r0 = 0 DEFREG r1 = 1 DEFREG r2 = 2 DEFREG r3 = 3 DEFREG r4 = 4 DEFREG r5 = 5 DEFREG r6 = 6 DEFREG r7 = 7 //wir adressieren zwei Register mode-feld brauchen wir nicht.. DEFR2POS 0 DEFR1POS 3 DEFMODPOS 6 DEFOPCPOS 10 // Steuerbefehle DEFOPC nop = 0 0x0001 //NMO DEFOPC stop = 1 0x0001 //NMO DEFOPC jsr = 2 0x0002 //MA DEFOPC ret = 3 0x0001 //NMO getestet DEFOPC bra = 4 0x0002 //MA DEFOPC beq = 5 0x0002 //MA DEFOPC bgt = 6 0x0002 //MA DEFOPC blt = 7 0x0002 //MA DEFOPC boo = 8 0x0002 //MA DEFOPC boc = 9 0x0002 //MA // Arithmetische Befehle DEFOPC add = 16 0x0050 //MRR, MRLIT DEFOPC sub = 17 0x0050 //MRR, MRLIT DEFOPC multl = 18 0x0050 //MRR, MRLIT DEFOPC multh = 19 0x0050 //MRR, MRLIT DEFOPC div = 20 0x0050 //MRR, MRLIT DEFOPC mod = 21 0x0050 //MRR, MRLIT DEFOPC neg = 22 0x0050 //MRR, MRLIT DEFOPC comp = 23 0x0050 //MRR, MRLIT // Arithmetische Befehle DEFOPC not = 32 0x0050 //MRR, MRLIT DEFOPC and = 33 0x0050 //MRR, MRLIT DEFOPC or = 34 0x0050 //MRR, MRLIT DEFOPC xor = 37 0x0050 //MRR, MRLIT // Transferbefehle DEFOPC load = 48 0x0170 //MRRI, MRA, MRLIT DEFOPC store = 49 0x0100 //MRRI ORG 0 load r0 #0 add r0 #SORTFIELD // Start der zu sortierenden Zahlen load r2 #10 // Anzahl der zu sortierenden Zahlen load r1 #1 // Ein zum subtrahieren load r6 r0 add r6 r2 // Adresse des letzten Elements LOOPI: load r4 r0 // r4 zeigt auf das kleinste Element load r5 (r0) // Wert des kleinsten Elements LOOP: load r3 (r0) // aktuelles Element laden comp r3 r5 // mit kleinstem vergleichen bgt BIGGER // Wenn grösser, dann nicht swappen load r4 r0 // Pointer neu setzen load r5 r3 // Wert des kleinsten Element setzen BIGGER: add r0 r1 comp r0 r6 beq W1 bra LOOP W1: sub r0 r2 load r7 (r0) // Anfang retten store r5 (r0) // kleinste Element an Anfang speichern store r7 (r4) // Altes Element an alte Stelle add r0 r1 sub r2 r1 // Fertig sortiert? beq W2 // Wenn nein, dann nochmal sortieren bra LOOPI W2: stop SORTFIELD: FCW 10 FCW 5 FCW 15 FCW 7 FCW 0xffff FCW 150 FCW 0xfff0 FCW 3 FCW 111 FCW 150