02.05.2013 Aufrufe

beginner_de

beginner_de

beginner_de

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!