beginner_de
beginner_de
beginner_de
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Avr-Asm-Tutorial S. 5<br />
Das SLEEP kann sich im Gegensatz zu 9588 hexi<strong>de</strong>zimal auch jemand wie ich merken, <strong>de</strong>r schon<br />
bei <strong>de</strong>r eigenen Telefonnummer Schwierigkeiten hat.<br />
Addieren heißt einfach "ADD". Um die bei<strong>de</strong>n Register auch noch gleich in einer leicht lesbaren<br />
Form mit anzugeben, lautet die gesamte Instruktion "ADD R0,R1". Der gesamte Ausdruck übersetzt<br />
sich in ein einziges binäres 16-Bit-Wort, nämlich 0C01. Die Übersetzung erledigt <strong>de</strong>r Assembler.<br />
Die Formulierung übersetzt <strong>de</strong>r Assembler in exakt das 16-Bit-Wort, das dann im Flash-Speicher<br />
steht, von <strong>de</strong>r CPU dort abgeholt, in ihre interne Ablauffolge umgewan<strong>de</strong>lt und ausgeführt wird. Für<br />
je<strong>de</strong> Instruktion, die die CPU versteht, gibt es ein entsprechen<strong>de</strong>s Mnemonic. Umgekehrt: es gibt<br />
keine Mnemonics, <strong>de</strong>nen nicht exakt ein bestimmter Ablauf einer CPU-Instruktion entspricht. Die<br />
Fähigkeit <strong>de</strong>r CPU bestimmt bei Assembler also <strong>de</strong>n Sprachumfang. Die "Sprache" <strong>de</strong>r CPU selbst<br />
ist also bestimmend, die Mnemonics sind bloß repräsentative Statthalter für die Fähigkeiten <strong>de</strong>r<br />
CPU selbst.<br />
2.4 Unterschied zu Hochsprachen<br />
Hier ist für Hochsprachler noch ein Hinweis nötig.<br />
In Hochsprachen sind die Sprachkonstrukte we<strong>de</strong>r von <strong>de</strong>r Hardware noch von <strong>de</strong>n Fähigkeiten <strong>de</strong>r<br />
CPU abhängig. Die Sprachkonstrukte laufen auf einer Vielzahl von Prozessoren, sofern es für die<br />
Sprache einen Compiler gibt, <strong>de</strong>r die erdachten Schlüsselwörter in CPU-Operationen übersetzen<br />
kann. Ein GOTO in Basic mag so ähnlich aussehen wie ein JMP in Assembler, dahinter steckt aber<br />
ein ganz an<strong>de</strong>res Konzept.<br />
Die Sache mit <strong>de</strong>r Übertragbarkeit auf an<strong>de</strong>re Prozessoren funktioniert natürlich nur, solange <strong>de</strong>r<br />
Controller und seine CPU das mitmacht. Letztlich bestimmt dann die Hochsprache, welcher Prozessor<br />
geht und welcher nicht. Ein ärmlicher Kompromiss, weil er unter Umstän<strong>de</strong>n ganze Welten mit<br />
ihren vielfältigen Möglichkeiten als ungeeignet ausschließt.<br />
Deutlich wird das bei <strong>de</strong>r oben gezeigten Instruktion "MUL". In Assembler kann die CPU das Multiplizieren<br />
entwe<strong>de</strong>r selbst erledigen o<strong>de</strong>r <strong>de</strong>r Assemblerprogrammierer muss sich selbst eine Multiplikationsroutine<br />
aus<strong>de</strong>nken, die das erledigt. In einem für einen ATtiny13 geschriebenen Assembler-Quellco<strong>de</strong><br />
MUL zu verwen<strong>de</strong>n, gibt einfach nur eine Fehlermeldung (Illegal instruction). In einer<br />
Hochsprache wird <strong>de</strong>r Compiler bei einer Multiplikation feststellen, ob eine Multiplikationseinheit<br />
vorhan<strong>de</strong>n ist, dann erzeugt er <strong>de</strong>n Co<strong>de</strong> entsprechend. Ist keine da, fügt er entsprechen<strong>de</strong>n Co<strong>de</strong><br />
ein, ohne dass <strong>de</strong>r Programmierer das bemerkt. Und vielleicht auch noch gleich eine Integer-,<br />
Longword- und an<strong>de</strong>re Multiplikationsroutinen, ein ganzes Paket eben.<br />
Und schon reicht das Flash eines Tiny nicht mehr aus und es muss unbedingt ein Mega mit Dutzen<strong>de</strong>n<br />
unbeschalteter Pins sein damit <strong>de</strong>r Elefant nicht benutzter Routinen reinpasst.<br />
2.5 Assembler und Maschinensprache<br />
Assembler wird wegen seiner Nähe zur Hardware auch oft als Maschinensprache bezeichnet. Das<br />
ist nicht ganz exakt, weil die CPU selbst nur 16-bittige Worte, aber nicht die Zeichenfolge "ADD<br />
R0,R1" versteht. Der Ausdruck "Maschinensprache" ist daher eher so zu verstehen, dass <strong>de</strong>r Sprachumfang<br />
exakt <strong>de</strong>m <strong>de</strong>r Maschine entspricht und <strong>de</strong>r Assembler nur menschenverständliche Kürzel<br />
in maschinenverständliche Binärworte verwan<strong>de</strong>lt.