Version 2.0 Aktualisiert: 30.03.04



Definition: Assembleranweisungen.
Eine Anweisungszeile weist den Assembler an, etwas zu tun, was mit der Erzeugung von Befehlen nichts zu tun hat. Die Anweisungen sind z.B. zur Deklaration von Daten und Datenstrukturen da, oder beeinflussen die Arbeitsweise des Assemblers.


1. Format einer Assembler-Zeile:

[Label] [Befehl/Anweisung] [Operanden] [;Kommentar]

Die eckigen Klammern sollen zeigen, dass die aufgeführten Komponenten optional sind, man kann sie also auch weglassen. Der Abstand zwischen den einzelnen Komponenten kann beliebig gross sein (>0), er sollte jedoch aufgrund der besseren Übersichtlichkeit nicht zu gross gewählt werden. Auch sollten die Spalten einheitlich gestaltet werden.

2. Das Label:
Das Label kennzeichnet Variablen, Werte und Sprungziele. Beim assemblieren werden die Labels in Adressen umgesetzt.

Beispiele:
Var1  dw  ?  ;Anlegen einer Variable, von 2 Byte (dw = define Word) Var1 steht für die 
             ;Adresse, an der der Assembler den Platz für die Variable Var1 reserviert.  


Beenden:                     ;Diese Label dient als Spungziel, es benötigt daher am 
             mov  ah,4Ch     ;Ende ein Doppelpunkt
             int  21h        

3. Variablen und Konstanten.
Variablen kommen normalerweise in das Datensegment. Nur in COM Dateien, die ich später noch erklären stehen sie im Codesegment. Variablen sind mindestens ein Byte gross bzw. das ganzzahlige Vielfache eines Bytes, also z.B. ein Wort (2 Byte) oder ein Doppelwort.
Durch die Assembleranweisungen DB (define Byte), DW (define Word), DD (define Doubleword) , DQ (define Quadword) und DT (define Tennbytes) kann man Speicherplatz im Datensegment reservieren. Dieser kann dann über den Variablennamen angesprochen werden. Beispiel:
Im Datensegment:
Variable1    DB   40h   ;Variable1 ist mit dem Wert 40h vorbelegt.

Im Codesegment:
mov ah,Variable1        ;Den Inhalt der Variablen nach ah schieben.

mov dx,OFFSET Variable1 ;Die Offsetadresse der Variablen nach dx schieben.
a) Uninitialisierte Variablen.
Oft bekommt eine Variable erst im Verlauf des Programmes einen Wert und muss daher nicht mit einem Wert vorbesetzt werden. Um eine solche uninitialisierte Variable zu erstellen, setzt man anstelle des Wertes ein Fragezeichen :

Variable2 DB ? ;reserviert ein uninitialisiertes byte.


b) Zeichenketten oder Strings.
Zeichenketten beinhalten zum Beispiel den Text, der auf den Bildschirm ausgegeben wird, oder in eine Datei geschrieben wird. Da ein Zeichen ein Byte benötigt, verwendet man DB. Der String selbst steht in zwei " oder ´.
Siehe auch vorherige Seite!

Beispiel:
Text1  DB "So geht´s "
Text2  DB ´Und "so" auch´
Text3  DB "So "aber" nicht"        ;<-- Fehler !!
Text4  DB ´So geht´s auch nicht´   ;<-- Fehler !!

c) Zahlen.
Natürlich können Variablen auch numerische Werte haben.
So erzeugt zu Beispiel die folgende Assembleranweisung
Zahlen   DB 1,2,3,4,5,6 
einen 6 Bytes langen Speicherbereich, wobei das erste Byte den Wert 1 hat, das zweite Byte den Wert 2 usw.

Die Assembleranweisung
Zahl  DW  888
reserviert 2 Bytes und speichert darin die Zahl 888.


d) Der DUP-Operator.
Um ein Tabelle mit sich wiederholenden Werten zu erstellen, kann man die Assembleranweisung DUP verwenden. Um z.B. eine Tabelle mit 12 Nullen zu erzeugen, kann man entweder schreiben:
Tabelle1  DB 0,0,0,0,0,0,0,0,0,0,0,0

Oder aber viel kürzer:
Tabelle1  DB 12 DUP (0)

Weitere Beispiele:

Tabelle  DB 2 DUP (1,2,3)   entspricht:   Tabelle  DB 1,2,3,1,2,3
Tabelle  DB 9 DUP (?)       entspricht:   Tabelle  DB ?,?,?,?,?,?,?,?,?
Tabelle  DW 4 DUP (888)     entspricht:   Tabelle  DW 888,888,888,888  

e) Konstanten.
Konstanten brauchen selbst keinen Speicherplatz, eine Konstante enthält einen Wert, der im Programm nicht verändert werden kann. Die Konstante wird gewöhnlich am Anfang definiert. Die Konstante kann dann im Programm anstatt ihres Wertes verwendet werden.
Eine Konstante wird mit der Assembleranweisung EQU definiert: Name EQU Ausdruck.
Beispiel:

                      .MODEL SMALL
                      .STACK 100h
 
;Definition der Konstanten
    
Write                  EQU   09h
Beenden                EQU   4Ch
 
                      .DATA
Msg                   DB  "Hallo$"

                      .CODE
                      mov  ax,@data
                      mov  ds,ax
                      mov  dx,OFFSET Msg
                      mov  ah,Write      ;Write=09h !
                      int  21h
                      mov  ah,Beenden    ;Beenden=4Ch !
                      int  21h
                      END

Auch ist zum Beispiel folgendes möglich:

ProgramSize   EQU ProgramEnd - ProgramStart
Wenn ProgramEnd ein Label am Ende des Programms ist und ProgramStart eines am Anfang, den enthält ProgramSize die Gesamtlänge des Programms.
Konstanten machen die Wartung des Programmes wesentlich einfacher, da anstatt vieler Werte nur einer geändert werden muss.

Weiter geht es mit wichtigen Befehlen.
Diese sollten Sie in jedem Fall durchlesen, um einen Überblick zu gewinnen.

Zurück Weiter Inhalt