beginner_de
beginner_de
beginner_de
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Avr-Asm-Tutorial S. 6<br />
2.6 Interpreterkonzept und Assembler<br />
Bei einem Interpreter übersetzt die CPU selbst <strong>de</strong>n menschenverständlichen Co<strong>de</strong> erst in ihr verständliche<br />
Binärworte. Der Interpreter wür<strong>de</strong> die Zeichenfolge "A = A + B" einlesen (neun<br />
Zeichen), wür<strong>de</strong> die Leerzeichen darin herausschälen, die Parameter A und B i<strong>de</strong>ntifizieren, wür<strong>de</strong><br />
das "+" in eine Addition übersetzen und letztlich vielleicht das Gleiche ausführen wie die Assemblerformulierung<br />
weiter oben.<br />
Im Unterschied zum Assembler oben, bei <strong>de</strong>r die CPU nach <strong>de</strong>m Assemblieren sofort ihr Lieblingsfutter,<br />
16-bittige Instruktionsworte, vorgeworfen bekommt, ist die CPU beim Interpreterkonzept<br />
überwiegend erst mit Übersetzungsarbeiten beschäftigt. Da zum Übersetzen vielleicht 20 o<strong>de</strong>r 200<br />
CPU-Schritte erfor<strong>de</strong>rlich sind, bevor die eigentliche Arbeit geleistet wer<strong>de</strong>n kann, ist ihre Ausführungsgeschwindigkeit<br />
nur als lahm zu bezeichnen.<br />
Was bei schnellen Prozessoren noch verschmerzt wer<strong>de</strong>n kann, ist bei zeitkritischen Abläufen prohibitiv:<br />
niemand weiss, was die CPU wann macht und wie lange sie dafür tatsächlich braucht. Die<br />
Vereinfachung, sich nicht mit irgendwelchen Ausführungszeiten befassen zu müssen, bewirkt, dass<br />
<strong>de</strong>r Programmierer sich damit gar nicht befassen kann, weil ihm die nötigen Informationen darüber<br />
auch noch vorenthalten wer<strong>de</strong>n.<br />
2.7 Hochsprachenkonzepte und Assembler<br />
Hochsprachen ziehen zwischen die CPU und <strong>de</strong>n Quelltext noch weitere undurchaubare Ebenen<br />
ein. Ein durchgängiges Konzept sind z. B. sogenannte Variablen. Das sind Speicherplätze, die für<br />
eine Zahl, einen Text o<strong>de</strong>r auch nur einen einzigen Wahrheitswert vorbereitet wer<strong>de</strong>n und im Quelltext<br />
<strong>de</strong>r Hochsprache für <strong>de</strong>n betreffen<strong>de</strong>n Speicherplatz stehen.<br />
Vergessen Sie für das Erlernen von Assembler zu allererst das ganze Variablenkonzept, es führt Sie<br />
nur an <strong>de</strong>r Nase herum und hält Sie davon ab, das Konzept zu durchblicken. Assembler kennt nur<br />
Bits und Bytes, Variablen sind ihm völlig fremd.<br />
Hochsprachen for<strong>de</strong>rn zum Beispiel, dass Variablen vor ihrer Verwendung zu <strong>de</strong>klarieren sind, also<br />
z. B. als Byte (8-Bit) o<strong>de</strong>r Double-Word (16-Bit-Wort). Compiler platzieren solche Variablen dann<br />
je nach Geschmack irgendwo in <strong>de</strong>n Speicherraum o<strong>de</strong>r in die im AVR reichlich vorhan<strong>de</strong>nen 32<br />
Register. Ob er <strong>de</strong>n Speicherort, wie <strong>de</strong>r Assemblerprogrammierer, mit Übersicht und Nach<strong>de</strong>nken<br />
entschei<strong>de</strong>t, ist von <strong>de</strong>n Kosten für <strong>de</strong>n Compiler abhängig. Der Programmierer kann nur noch versuchen<br />
herauszufin<strong>de</strong>n, wo die Variable <strong>de</strong>nn letztlich steckt. Die Verfügungsgewalt darüber hat er<br />
<strong>de</strong>m Compiler überlassen.<br />
Die Instruktion "A = A + B" ist jetzt auch noch typgeprüft: ist A ein Zeichen (Char) und B eine Zahl<br />
(1), dann wird die Formulierung so nicht akzeptiert, weil man Zeichenco<strong>de</strong>s angeblich nicht zum<br />
Addieren benutzen kann. Der Schutzeffekt dieses Verbots ist ungefähr Null, aber Hochsprachenprogrammierer<br />
glauben dass sie dadurch vor Unsinn bewahrt wer<strong>de</strong>n. In Assembler hin<strong>de</strong>rt nichts und<br />
niemand daran, zu einem Byte z. B. sieben dazu zu zählen o<strong>de</strong>r 48 abzuziehen, egal ob es sich bei<br />
<strong>de</strong>m Inhalt <strong>de</strong>s Bytes um ein Zeichen o<strong>de</strong>r eine Zahl han<strong>de</strong>lt. Was in <strong>de</strong>m Register R0 drin steht,<br />
entschei<strong>de</strong>t <strong>de</strong>r Programmierer, nicht <strong>de</strong>r Compiler. Ob eine Operation mit <strong>de</strong>m Inhalt Sinn macht,<br />
entschei<strong>de</strong>t <strong>de</strong>r Programmierer und nicht <strong>de</strong>r Compiler. Ob vier Register einen 32-Bit-Wert repräsentieren<br />
o<strong>de</strong>r vier ASCII-Zeichen, ob die in auf- o<strong>de</strong>r absteigen<strong>de</strong>r Reihenfolge o<strong>de</strong>r völlig durcheinan<strong>de</strong>r<br />
liegen, kann sich <strong>de</strong>r Assemblerprogrammierer auch aussuchen, <strong>de</strong>r Hochsprachenprogrammierer<br />
nicht. Typen gibt es in Assembler nicht, alles besteht aus beliebig vielen Bits und Bytes<br />
an bliebigen Orten im verfügbaren weitläufigen Speicherraum.<br />
Von ähnlichem Effekt sind auch die an<strong>de</strong>ren Regeln, <strong>de</strong>nen sich <strong>de</strong>r Programmierer in Hochsprachen<br />
zu unterwerfen hat. Angeblich ist es sicherer und übersichtlicher, alles in Unterprogrammen zu