Um Adressen und Daten wieder zu finden, müssen sie eindeutig zuordenbar gesichert werden.
Programmadressen als Stack (= abgelegte Karten). Verwaltet mit den Befehlen RET und CALL für die Adressen und PUSH(F) und POP(F) zum Sichern und Zurückholen der Daten, deren Reihenfolge und tatsächlichen Inhalt, ob Adresse oder Daten beachtet werden muss.
2 Möglichkeiten:call push pop ret
push call ret pop (schneller, Programm größer)
PUBLIC ProcedurName
.MODEL SMALL
.STACK 256
.CODE
ProcedurName PROC NEAR (FAR) (2)(USES BX CX)
(1)PUSH BX da die Register BX,CX verwendet werden.
PUSH CX
---------
---------
POP CX
POP BX
ProcedurName ENDP
END
Speicherbereich für Stack:: .STACK 256 in Byte
Sprungmarke: MARKE: muss zuerst definiert werden.
Vergleiche a mit b (intern a-b): cmp a,b
Wenn Ergebnis gleich, etc. dann Sprung: je MARKE
Wenn Haupt- und Unterprogramm im gleichen Segment: NEAR
Bei far:
Im Hauptprogramm:
Zuerst: EXTRN MYPROC:FAR
damit Kompiler weiß, dass myproc in einer anderen kompilierten Datei definiert ist. Diese Datei kann einen beliebigen Namen besitzen, da sie verlinkt werden muss. Mehrere Prozeduren werden in eine Datei mit ml/c kompiliert und als Bibliothek (.lib) dem Linker übergeben.
typen: NEAR,FAR,ABS,BYTE,WORD,...
.MODEL SMALL
-
-
Aufruf: CALL MYPROC
Far Labels können an beliebiger Stelle stehen, Daten im Datensegment.
Im Unterprogramm:
Zuerst: PUBLIC MYPROC
damit Kompiler weiß, dass myproc nicht in dieser Datei ( = lokal), sondern extern verwendet wird. Public können auch Variable, mit equ zugewiesene Konstante oder Marken sein.
.MODEL SMALL
-
-