Zum Inhalt springen

Maschinensprache i8086/ Was ist Assembler

Aus Wikibooks

Theorie:  EinleitungMaschinenspracheAssemblerZahlensystemeRAM-AdressenBWSDebugCPU-RegisterEinfache BefehleStringbefehleInterruptsI/O-Ports
Versuch:  BWS1BWS2Hallo WeltBootsektorMBR
Nützlich: BefehlslistePAUSEFilter
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
Abb. 1 - Übersetzung eines Assemblerprogramms in Maschinensprache

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.