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