02.05.2013 Aufrufe

beginner_de

beginner_de

beginner_de

MEHR ANZEIGEN
WENIGER ANZEIGEN

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. 3<br />

2 Das Konzept hinter <strong>de</strong>r Sprache Assembler<br />

Achtung! Bei dieser Seite geht es um die Programmierung von Mikrocontrollern, nicht um PCs mit<br />

Linux- o<strong>de</strong>r Windows-Betriebssystem und ähnliche Elefanten, son<strong>de</strong>rn um kleine Mäuse. Es geht<br />

auch nicht um die Programmierung von Ethernet-Megamaschinen, son<strong>de</strong>rn um die Frage, warum<br />

man als Anfänger eher mit Assembler beginnen sollte als mit einer Hochsprache. Sie erläutert, was<br />

das Konzept hinter Assembler ist, was Hochsprachenprogrammierer vergessen müssen, um Assembler<br />

zu lernen und warum Assembler manchmal fälschlich als "Maschinensprache" bezeichnet wird.<br />

2.1 Die Hardware von Mikrocontrollern<br />

Was hat die Hardware von Mikrocontrollern mit Assembler zu tun? Viel, wie aus <strong>de</strong>m Folgen<strong>de</strong>n<br />

hervorgeht. Das Konzept bei Assembler ist, die Ressourcen <strong>de</strong>s Prozessors unmittelbar zugänglich<br />

zu machen. Unter Ressourcen sind dabei alle Hardwarebestandteile zu verstehen, also<br />

• die zentrale Steuer- und Recheneinheit (CPU) und <strong>de</strong>ren Rechenknecht, die Arithmetische<br />

und Logik-Einheit (ALU),<br />

• die diversen Speichereinheiten (interne o<strong>de</strong>r externe RAM, EEPROM-Speicher),<br />

• die Ports, die das Verhalten von Portbits ebenso beeinflussen wie auch Zeitgeber (Timer),<br />

AD-Wandler und an<strong>de</strong>re Geräte.<br />

2.2 Die Arbeitsweise <strong>de</strong>r CPU<br />

Am Wichtigsten ist die Fähigkeit <strong>de</strong>r zentralen Steuereinheit, Instruktionen aus <strong>de</strong>m Programmspeicher<br />

(Flash) zu holen (Instruction fetch), in auszuführen<strong>de</strong> Schritte zu zerlegen und diese Schritte<br />

dann auszuführen. Die Instruktionen stehen dabei in <strong>de</strong>n AVR als 16-bittige Zahlenwerte im Flash-<br />

Speicher und wer<strong>de</strong>n von dort schrittweise abgeholt. Der Zahlenwert übersetzt sich dann z. B. in die<br />

Addition <strong>de</strong>r bei<strong>de</strong>n Register R0 und R1 und das Speichern <strong>de</strong>s Ergebnisses im Register R0. Register<br />

sind dabei Speicherzellen, die 8 Bits enthalten und direkt gelesen und beschrieben wer<strong>de</strong>n können.<br />

An einigen Beispielen soll das genauer gezeigt wer<strong>de</strong>n.<br />

CPU-Operation Ko<strong>de</strong> (binär) Ko<strong>de</strong>(Hex)<br />

CPU schlafen legen 1001.0101.1000.1000 9588<br />

Register R1 zu Register R0 addieren 0000.1100.0000.0001 0C01<br />

Register R1 von Register R0 subtrahieren 0001.1000.0000.0001 1801<br />

Konstante 170 in Register R16 schreiben 1110.1010.0000.1010 EA0A<br />

Multipliziere Register R3 mit Register R2, Ergebnis in R1 und R0 1001.1100.0011.0010 9C32<br />

Wenn die CPU also hexa<strong>de</strong>zimal 9588 aus <strong>de</strong>m Flashspeicher liest, stellt sie ihre Tätigkeit ein und<br />

holt keine weiteren Instuktionen mehr aus <strong>de</strong>m Speicher. Keine Angst, da ist noch ein weiterer<br />

Schutzmechanismus davorgeschaltet, bevor sie das tatsächlich ausführt. Und man kann sie auch<br />

wie<strong>de</strong>r aus diesem Zustand aufwecken. Liest sie hexa<strong>de</strong>zimal 0C01, addiert sie R0 und R1 und<br />

schreibt das Ergebnis in das Register R0. Das läuft dann etwa so ab:

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!