Assemblersprache
🎯 Um was geht es?
Eine Assemblersprache, kurz auch Assembler genannt, ist eine Programmiersprache, die auf den Befehlssatz eines bestimmten Computertyps (d.h. dessen Prozessorarchitektur) ausgerichtet ist.
Der Befehlssatz eines Prozessors sit die Menge der Maschinenbefehle, die ein bestimmter Prozessor ausführern kann. Je nach Prozessor variiert der Umfang des Befehlssatzes zwischen 33 und 500 Befehlen.
Assemblersprachen bezeichnet mman als maschinenorientierte Programmiersprachen und - als Nachfolger der direkten Programmierung mit Zahlencodes - als Programmiersprachen der zweiten Generation: Anstelle eines Binärcodes der Maschinensprache können Befehle und Operanden durch leichter verständliche mnemonische Symbole in Textform (z.B. "MOVE"), Operanden z.T. als symbolische Adresse (z.B. "PLZ"), notiert und dargestellt werrden.
Der Quelltext eines Assemblerprogramms wird mit Hilfe einer Übersetzungssoftware (Assembler oder Assemblierer) in Maschinencode übersetzt. Dagegen übersetzt in höheren Programmiersprachen (Hochsprachen, dritte Generation) ein sogenannter Compiler abstraktere (komplexere, nicht auf den Prozessor-Befehlssatz begrenzte) Befehle in den Maschinencode der gegebenen Zielarchitektur – oder in eine Zwischensprache.
Little Man Computer (LMC)
LMC Instruction Set
Es gibt verschiedene Befehle im Little Man Computer.
Wichtig sind die Mnemonics. Diese braucht man, um Befehle auszuführen.
Einstiegsaufgabe - Step By Step
Wir arbeiten mit dem Little Man Computer von Peter Higginson: http://www.peterhigginson.co.uk/LMC/
Es sollte nun Schritt für Schritt ein Einstiegsbeispiel zusammen angeschaut werden:
Öffne den Little Man Computer mit einem Browser Deiner Wahl.
Wir wollen 2 Zahlen miteinander addieren. Diese Zahlen werden von Dir dem Computer als Input mitgegeben. Das Resultat sollte als Output ausgegeben werden. Unser Code wird folgend aussehen:
Schreibe diesen Code in das Textfeld and klicke auf Submit.
Klicke auf Run und beobachte was passiert. Beschreibe in eigenen Worten was Zeile für Zeile im Programm passiert.
Vergleiche deine Lösung mit der Lösung von mir.
Übungen
Kann man den Code von oben schneller machen? Tipp: was ist die Rolle des Akkumulators?
Schreibe einen Code, um eine Zahl von einer anderen Zahl zu subtrahieren. Die beiden Zahlen sollten Input Werte sein.
Fordere zur Eingabe einer Zahl auf, addiere drauf den Wert 3, gib das Resultat als Ausgabe aus. (Wenn Du eine fixe Zahl addierern möchtest, welche nicht über den Input "reinkommt", kannst Du das mittels des Befehls x DAT y machen. (Beispiel THREE DAT 3, d.h. Reserviere Speicherort mit Namen Three, weise diesem Speicherort die Zahl 3 zu).
Fordere zur Eingabe von 5 Zahlen auf, addiere diese alle zusammen und gib das Resultat als Output aus.
Schreiben Sie ein Programm, das fünf Zahlen als Eingabe fordert, die ersten drei addiert, die vierte und fünfte Zahl davon subtrahiert und dann Ergebnis ausgibt.
Schreiben Sie ein Programm, das drei Zahlen als Eingabe fordert, diese addiert, die Summe verdoppelt und das Ergebnis ausgibt.
Decision Making
Manchmal sollte Code nur zu bestimmten Bedingungen ausgeführt werden. Der Little Man Computer kann das auch.
Dafür gibt es drei unterschiedliche Befehle:
BRA: branch always
BRZ: branch if the outcome is 0
BRP: Branch if the outcome is 0 or positive
Einstiegsaufgabe
Wir wollen bestimmen, welche der beiden eingegebenen Zahlen grösser ist als die andere. Betrachte das Codestück rechts neben dran und versuche zu verstehen, was die einzelnen Schritte sind. Gib die Befehlabfolge in den Little Man Computer ein und gehe Step für Step durch die Befehle durch.
Öffne den Little Man Computer mit einem Browser Deiner Wahl.
Schreibe diesen Code in das Textfeld and klicke auf Submit.
Klicke auf Run und beobachte was passiert. Beschreibe in eigenen Worten was Zeile für Zeile im Programm passiert.
Vergleiche deine Lösung mit der Lösung von mir.
Findest Du noch eine andere Lösung für dasselbe Problem mit weniger Zeilen Code?
Übungen für Schnelle
Erstelle einen Countdown von einer gegebenem Input. Es gibt dazu auch den praktischen Befehl LOOP.
Der LMC kann Zahlen addieren oder subtrahieren, aber er kann weder multiplizieren noch dividieren. Dieser offensichtliche Nachteil macht die Programmierung noch interessanter: Die Multiplikation kann nämlich mit Hilfe der Addition durchgeführt werden! Hier ist der Trick: 2 x 3 = 6, also: 2 + 2 + 2 = 6; 3 x 4 = 12, also 3 + 3 + 3 + 3 = 12. Mit Hilfe einer Schleife addieren wir also die erste Zahl so oft wie die zweite Zahl! Schreibe einen Code, der genau das macht.
Schreibe das Programm, um die Quadratzahl einer eingegebenen Zahl zu berechnen.
Kannst Du den ASCII table berechnen?