Assembler ist die Sprache der Maschinen (3)

Sicher fragen Sie sich jetzt, woher Sie wissen sollen, welches Byte oder gar Bit im Arbeitsspeicher Ihres PCs wofür verantwortlich ist. Damit sind wir auch schon bei der nächsten Schlussfolgerung:

Ohne Kenntnis über die interne Architektur des Mikroprozessors Ihres PCs ist eine erfolgreiche Programmierung in Assembler mit großer Wahrscheinlichkeit zum Scheitern verurteilt. Womit wir beim wesentlichen Nachteil von Maschinensprache wären: Es gibt ebenso viele verschiedene Assembler wie Prozessor-Familien, die zum Teil erheblich voneinander abweichen.

Wenn Sie nicht über Sammlungen (Bibliotheken) von kleinen nützlichen Routinen verfügen oder gar in Unkenntnis über so genannte DOS-Funktions- beziehungsweise BIOS-Aufrufe sind, müssen Sie so ziemlich oft das Rad neu erfinden.

Haben Sie sich aber einmal in die Maschinensprache eines Mikroprozessors eingearbeitet, fällt Ihnen der Umstieg auf einen anderen Prozessor nicht sonderlich schwer. Auch verfeinert sich Ihr Verständnis für höhere Programmiersprachen, da Sie während der Programmierung in Assembler einen sicheren Spürsinn für Details entwickeln. Für stundenlanges Ausprobieren und zahlreiche Abstürze Ihres PCs werden Sie durch rasend schnelle Ausführung Ihrer Assemblerprogramme entschädigt. Auch dafür haben wir ein schönes Beispiel parat.

Das Programm in Bild 3 in Turbo-Pascal benötigt auf einem 80286-AT mit einer Hercules-Grafikkarte ungefähr 13 Sekunden, um 4096mal „Hallo!“ auf dem Bildschirm auszugeben:

Program PasBench;

Var CX: integer;

Begin
 For CX:= 1 to 4096 do
 Begin
 Write('Hallo! ');
End;
End.

Das Assemblerprogramm in Bild 4 benötigt für die gleiche Aufgabe nur etwa 7 Sekunden! Geben Sie es wie gewohnt mit Ihrem Debugger ein, nur dass Sie bei der Adresse 011A im zweiten Abschnitt erstmal die Entertaste drücken und anschließend E 011A eingeben. Vervollständigen Sie die Zeile unserem Listing entsprechend und starten Sie das Programm mit g=100.

Übrigens gibt es noch eine komfortablere Möglichkeit, Assemblerroutinen in den Debugger einzugeben und (!) gleichzeitig ablauffähige Programme zu erzeugen. Sie benötigen dafür nur einen einfachen Texteditor. Erzeugen Sie eine ASCII-Datei namens HALLO.DEB mit den folgenden Zeilen:

A
MOV CX,1000
MOV BL,0F
MOV AH,0E
MOV SI,0000
MOV AL,[SI+011A]
INT 10
INC SI
CMP SI,7
NOP
JNZ 010A
LOOP 0107
RET

E 11A "Hallo! "
NHALLO.COM
RCX
100
W
Q

Wichtig ist, dass Sie nach dem Befehl RET eine Leerzeile lassen, bevor Sie die Zeile E 11A „Hallo! “ eingeben und NHALLO.COM ohne Leerzeichen zwischen den Buchstaben N und H schreiben. Allerdings muss sich zwischen dem Ausrufe- und Anführungszeichen in „Hallo! “ ein Leerzeichen befinden. Statt der hexadezimalen Zahl 100 (dezimal 256) können Sie auch die tatsächliche Länge der Routine in Bytes eintragen, was aber in diesem Fall nicht unbedingt erforderlich ist.

Starten Sie die Übersetzung der Routine durch die Eingabe DEBUG <HALLO.DEB. Anschließend können Sie Hallo Sofort starten. Zeigt Ihr Monitor nur Datenmüll, dann müssen Sie sämtliche Zeilen noch einmal Zeichen für Zeichen überprüfen.

Obwohl Maschinensprache eine Herausforderung an den Programmierer ist und Sie auf jedes selbst entwickelte und funktionierende Assemblerprogramm stolz sein können, sollten Sie stets überlegen, ob die Lösung der Problemstellung in einer höheren Programmiersprache leichter zu realisieren ist.

Quelle: PC Magazin PLUS, August 1988

💡 Sie haben einen Linkedin-Account? Dann können Sie meinen Newsletter „Der 18-Jährige, der einen Zettel schrieb und verschwand“ abonnieren ✔︎ 

Matomo