So der erste Schritt ist schon mal sich von der Klasse zu trennen.
Sprich alles was in "public class FibonacciIterativ" definiert ist,
muß in jeder Codezeile des eigentlichen Programms stehen.
(Assembler kennt keine Klassen)
Eigentlich muß man sich von allen Aspekten der Objekt orientierten Programmierung verabschieden (außer man deffiniert sie selbst in Assembler neu)
Schreib das mal so hin und schau schon mal welche Register im Zielsystem mit welcher Bitbreite für Operationen zur Verfügung stehen.
Ohne mir jetzt die Assemblerbefehle des spezifischen Zielsystems angesehen zu haben, wird z.B. aus einem Befehl wie:
int aa=b
lade Wert von Speicherzelle aa (Speicheradresse wo die Variable aa abgelegt wird) in Register xy.
Schreibe Wert von Register xy in Speicherzelle b (Speicheradresse wo die Variable b abgelegt wird).
danach hat man dann noch den Wert in dem Register xy stehen, und kann damit weiter arbeiten.
man braucht also lese und schreib Befehle und Vergleiche (für While und If) dann noch Sprünge um in die verschiedenen Zweige einer IF Struktur zu gelangen und auch wider raus sowie für Schleifen.
Gosub und Return kennt Assembler auch nicht.
Sprungbefehle sind eigentlich GOTO Befehle. (also das was man in Hochsprachen immer vermeiden soll)
Je nach Speicher Adressierung (Speicherblöcke) gibt es in Assembler auch Jump und Farjump. (hat der gesamte Code und die Daten in einem Speicherblock platz, dann spart man mit einem Jump gegenüber einem Farjump pro Befehl 33 bis 50% Speicherplatz und die Codeverarbeitung ist auch schneller.
Schreib jetzt mal den Code ohne die Klasse nochmal und bei den Returns und dem Ende der While Schleife je einen Komentar, das da ein Goto stattfindet und auch wohin.
Alternativ kann man sich auch das uralt Qbasic mal runterladen und den code damit schreiben.
Dadurch erhält man einen ser simplen sequentiellen Code der sich dann leicht in Assembler übersetzen lässt.
Wenn man den funktionierenden Assembler Code hat, kann man anfangen zu optimieren. (Verwendung von zwei, drei oder vier Registern um Schreib- und Leseoperationen zu minimieren.
Die Variablen stehen imme in den Registern und werden nur durch Registeroperationen bearbeitet. Nur die Ergebnisse werden geschrieben.
Da die Registerzugriffe schneller sind als Speicherzugriffe, wird damit die Verarbeitungsgeschwindigkeit deutlich erhöht.
Lesezeichen