Sortieren mit Bubble-Sort |
![]() |
![]() |
Letztmalig dran rumgefummelt: 28.06.07 07:48:27 |
ist wahrscheinlich fehlerfrei und kann unbedenklich verwendet werden |
|
Algotithmus Bubblesort:
Eine gegebene Menge von Elementen soll via Bubble-Sort sortiert werden.
Eingangsparameter: Divident in DE Divisor in HL und BC
Ausgangsparameter: Quotient in BC und HL
Verfahren:
Die Division ist die
Umkehrung der Multiplikation. Es soll eine Division mit einem Dividenden (DV)
von 32 Bit und einem Divisor (DR) von 16 Bit betrachtet werden. Der Quotient (Q)
möge 16 Bit sein.
Dann gilt:
DV : DR = Q Rest R oder:
Bringt man die Gleichung auf die Form
R = DV - Q - DR
und schreibt den Quotienten Q als Dualzahl
Q = Q15 · 215
+ Q14 · 214 + ... Q1 · 21
+ Q0
so kann man unser Verfahren aus der Gleichung
R = DV - 215 Q15 DR - 214 Q14 DR -... 21 Q1 DR - Q0 DR
ableiten.
Man probiert, ob 215
- DR vom Dividenden DV abzuziehen geht. Wenn »ja«, ist Q15 = 1, und
es werden 215 - DR abgezogen; wenn »nein«, ist Q15 = 0,
und 215 - DR werden nicht abgezogen. Danach verfährt man ebenso mit 214
- DR bis 20 - DR. Für die Division ergibt sich damit folgendes
Blockschema (Bild unten).
Bildung von Dividend - Divisor
Ist das Ergebnis negativ, so wird der Divisor wieder zum Ergebnis dazugezählt
(Rückstellung des Restes) und in die letzte Stelle des Quotienten eine 0
eingetragen.
Ist das Ergebnis positiv, so wird keine Rückstellung des Restes vorgenommen. In
die letzte Quotientenstelle trägt man eine 1 ein.
2. Quotient und Dividend werden gemeinsam 1 Stelle nach links verschoben. 3. 1.
und 2. werden so oft wiederholt, wie der Quotient Stellen haben soll.
Am Ende steht der Quotient im Quotientenregister und im Dividendenregister der
Rest. Da im Divisorregister der Divisor - 2'6 steht und wir mit einem
16-Bit-Divisor arbeiten, müssen Punkt 1 und 2 einmal zusätzlich durchlaufen und
die nach der ersten Linksverschiebung aus dem Restregister austretende vorderste
Stelle in einem weiteren Register aufgefangen werden.
Marke | Operation | Operand | Kommentar |
PN | B1 | ||
;BASISPROGRAMM EUER MULTIPLIKATION | |||
;16 X 16 BIT-MULTIPLIKATION, UNSIGNIERT, ERGEBNIS 32 BIT | |||
;MULTIPLIKAND IN DE | |||
;MULTIPLIKATOR IN BC | |||
MUL2: | LD | HL,0 | |
LD | A,17 | ;ZAEHLER | |
K3: | RR | B | |
RR | C | ||
DEC | A | ||
RZ | |||
JRNC | K7-# | ||
ADD | HL,DE | ||
K7: | RR | H | |
RR | L | ||
JR | K3-# | ||
END |
Beispiel für eine kleine Anweisungstabelle in vollständiger Assembler-Codierung
![]() zur Hauptseite |
© Samuel-von-Pufendorf-Gymnasium Flöha | © Frank Rost im Juni 2007 |
... dieser Text wurde nach den Regeln irgendeiner Rechtschreibreform verfasst - ich hab' irgendwann einmal beschlossen, an diesem Zirkus nicht mehr teilzunehmen ;-) „Dieses Land braucht eine Steuerreform, dieses Land braucht eine Rentenreform - wir schreiben Schiffahrt mit drei „f“!“ Diddi Hallervorden, dt. Komiker und Kabarettist |