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. 7<br />
programmieren, ausser nach festgelegten Regeln nicht im Programmablauf herum zu springen und<br />
immer Werte als Parameter zu übergeben und Resulate auch so entgegen zu nehmen. Vergessen Sie<br />
einstweilen die meisten dieser Regeln, Assembler braucht auch welche, aber ganz an<strong>de</strong>re, die Sie<br />
sich noch dazu alle selbst aus<strong>de</strong>nken müssen.<br />
Hochsprachenprogrammierer haben noch ein Konzept verinnerlicht, das beim Erlernen von Assembler<br />
nur hin<strong>de</strong>rlich ist: die Trennung in diverse Ebenen, in Hardware, Treiber und an<strong>de</strong>re Interfaces.<br />
In Assembler ist das alles nicht getrennt, eine Trennung macht auch keinen son<strong>de</strong>rlichen Sinn, weil<br />
Sie die Trennung dauernd wie<strong>de</strong>r durchlöchern müssen, um Ihr Problem optimal lösen zu können.<br />
Da viele Hochsprachenregeln in Mikrocontrollern keinen Sinn machen und das alles so puristisch<br />
auch gar nicht geht, erfin<strong>de</strong>t <strong>de</strong>r Hochsprachenprogrammierer gerne allerlei Möglichkeiten, um bei<br />
Bedarf diese Restriktionen zu umgehen. In Assembler stellen sich diese Fragen erst gar nicht. Alles<br />
ist im direkten Zugriff, je<strong>de</strong> Speicherzelle verfügbar, nix ist gegen Zugriff abgeschirmt, alles kann<br />
beliebig verstellt und kaputt gemacht wer<strong>de</strong>n. Die Verantwortung dafür bleibt alleine beim Programmierer,<br />
<strong>de</strong>r seinen Grips anstrengen muss, um drohen<strong>de</strong> Konflikte bei Zugriffen zu vermei<strong>de</strong>n.<br />
Dem fehlen<strong>de</strong>n Schutz steht die totale Freiheit gegenüber. Lösen Sie sich einstweilen von <strong>de</strong>n Fesseln,<br />
Sie wer<strong>de</strong>n sich an<strong>de</strong>re sinnvolle Fesseln angewöhnen, die Sie vor Unheil bewahren.<br />
2.8 Was ist nun genau warum einfacher?<br />
Alles was <strong>de</strong>r Assembler-Programmierer an Worten und Begriffen braucht, steht im Datenblatt <strong>de</strong>s<br />
Prozessors: die Instruktions- und die Porttabelle. Fertig. Mit diesen Begrifflichkeiten kann er alles<br />
erschlagen. Keine an<strong>de</strong>re Dokumentation ist vonnöten. Wie <strong>de</strong>r Timer gestartet wird (ist "Timer.-<br />
Start(8)" nun wirklich leichter zu verstehen als "LDI R16,0x02 und OUT TCCR0,R16"), wie er angehalten<br />
wird (CLR R16 und OUT TCCR0,R16), wie er auf Null gesetzt wird (CLR R16 und OUT<br />
TCNT0,R16), steht nicht in <strong>de</strong>r Dokumentation irgen<strong>de</strong>iner Hochsprache mit irgen<strong>de</strong>iner mehr o<strong>de</strong>r<br />
weniger eingängiger Spezialbegrifflichkeit, son<strong>de</strong>rn im Device Databook allein. Ob <strong>de</strong>r Timer 8-<br />
o<strong>de</strong>r 16-bittig ist, entschei<strong>de</strong>t <strong>de</strong>r Programmierer in Assembler selbst, bei Basic <strong>de</strong>r Compiler und<br />
bei C vielleicht auch <strong>de</strong>r Programmierer, wenn er genügend mutig ist.<br />
Was ist dann an <strong>de</strong>r Hochsprache leichter, wenn man statt "A = A * B" schreiben muss "MUL<br />
R16,R17"? Kaum etwas. Außer A und B sind nicht als Byte <strong>de</strong>finiert. Dann muss <strong>de</strong>r Assemblerprogrammierer<br />
überlegen, weil sein Hardware-MUL nur Bytes multipliziert. Wie man 24-bittige Zahlen<br />
mit 16-bittigen Zahlen mit und ohne Hardware-Multiplikator multipliziert, kann man lernen<br />
(siehe späteres Kapitel) o<strong>de</strong>r aus <strong>de</strong>m Internet abkupfern. Je<strong>de</strong>nfalls kein Grund, in eine Hochsprache<br />
mit ihren Bibliotheken zu flüchten, nur weil man zu faul zum Lernen ist.<br />
Mit Assembler lernt <strong>de</strong>r Programmierer die Hardware kennen, weil er ohne die Ersatzkrücke Compiler<br />
auskommen muss, die ihm zwar alles abnimmt, aber damit auch alles aus <strong>de</strong>r Hand nimmt. Als<br />
Belohnung für seine intensive Beschäftigung mit <strong>de</strong>r Hardware hat er die auch beliebig im Griff<br />
und kann, wenn er will, auch mit einer Baudrate von 45,45 bpm über die serielle Schnittstelle sen<strong>de</strong>n<br />
und empfangen. Eine Geschwindigkeit, die kein Windowsrechner zulässt, weil die Krücke Treiber<br />
halt nun mal nur ganzzahlige Vielfache von 75 kennt, weil frühere Fernschreiber mit einem Getriebe<br />
das auch schon hatten und flugs von 75 auf 300 umgeschaltet wer<strong>de</strong>n konnten.<br />
Wer Assembler kann, hat ein Gefühl dafür, was <strong>de</strong>r Prozessor kann. Wer dann bei komplexen Aufgabenstellungen<br />
zu einer Hochsprache übergeht, hat die Entscheidung rationaler gefällt als wenn er<br />
mangels Können erst gar nix an<strong>de</strong>res kennt und sich mit Work-Arounds für nicht in <strong>de</strong>r Hochsprache<br />
implementierte Features die Nacht um die Ohren schlagen muss. Der Assemblerprogrammierer<br />
hat zwar viel mehr selbst zu machen, weil ihm die ganzen famosen Bibliotheken fehlen, kann aber<br />
über so viel abseitiges Herumgeeiere nur lächeln, weil ihm die ganze Welt <strong>de</strong>s Prozessors unterwürfig<br />
zur Verfügung steht.