Maschinensprache i8086/ Was ist Assembler
Theorie:
Einleitung – Maschinensprache –
Assembler – Zahlensysteme –
RAM-Adressen – BWS – Debug –
CPU-Register – Einfache Befehle – Stringbefehle – Interrupts –
I/O-Ports
Versuch:
BWS1 – BWS2 –
Hallo Welt – Bootsektor – MBR
Nützlich:
Befehlsliste – PAUSE – Filter
Analyse:
Bootloader
Das Urlader-Maschinenspracheprogramm sieht reichlich unübersichtlich aus. Deutlich komfortabler wird es, wenn man ein sogenanntes Assemblerprogramm zur Verfügung hat. Man kann dann symbolische Bezeichnungen, Kommentare und Organisationsanweisungen verwenden. Obiges Beispiel könnte dann so aussehen:
ORG 07C00 ; Startadresse des Programms festlegen AA_MBR SEGMENT CODE STRT: CLI ; alle INTR sperren XOR AX,AX ; Ein Trick, um das AX-Register löschen MOV SS,AX ; Das SS-Register wird auf Null gesetzt MOV SP,Segment AA_MBR ; Sektor von 07C00 umkopieren ; Sektor mit 512 Byte ab 07C00h umkopieren nach 00600h MOV SI,SP ... JMP STEP2 ; Sprung nach 0000:061D ; Die Partitionstabelle wird nach aktiver Partition abgesucht ORG 0000:0600 STEP2: MOV SI,OFFSET PAR_TAB ... AA_MBR ENDS END
Die ORG Anweisung legt fest, ab welcher Speicheradresse das Programm während der späteren Ausführung untergebracht werden soll.
- AA_MBR, STEP2 und STRT sind Sprungmarken,
- AA_MBR ist außerdem der Programmname.
- PAR_TAB ist die symbolische Bezeichnung der Adresse des Beginns der Partitionstabelle.
Ein Programm, das einen solchen Quelltext in Maschinensprache übersetzen kann, nennt man ein Assemblerprogramm. Das englische Wort "to assemble" bedeutet "zusammenfügen, zusammenbauen". Wenn man ein Assemblerprogramm hat und sein Programm "in Assembler" schreiben kann, erleichtert das die Programmierung ungemein.
Assembler ist eine maschinenorientierte Sprache, ihre Struktur ist an die CPU-Eigenschaften angepasst. Eine Programmzeile entspricht genau einem Befehl. Man muss eine sehr klare Vorstellung vom Funktionieren und den Besonderheiten jedes einzelnen Befehls haben, um ein Programm schreiben zu können. Sie sind an eine konkrete Prozessorfamilie gebunden, das heisst: Ein für Intel-CPUs geschriebenes Assemblerprogramm muss für Macintosh oder IBM-Großrechner von Grund auf neu geschrieben werden. Assemblersprachen sind die ältesten Programmiersprachen. Sie zählen zur zweiten Generation der Programmiersprachen.
Zur dritten Generation der Programmiersprachen zählen sogenannte höhere Programmiersprachen wie Pascal, Cobol, Basic, C, Fortran, Java und andere. Eine höhere Programmiersprache ist eine Programmiersprache, in der man mit weniger Text viel mehr ausdrücken kann. Man muss sich keine Gedanken über die Arbeitsweise der CPU machen. Berechnungswünsche kann man beispielsweise als y = sin(x)+ 22 - (2 X + 3) schreiben. Diese Sprachen sind leichter verständlich. Ein Programm in einer höheren Programmiersprache kann – meist nach kleinen Anpassungen - auf grundverschiedenen Computersystemen ausgeführt werden, zum Beispiel auf einem PC, einem Macintosh oder einem Cray Supercomputer.