NEAR und FAR Prozeduren deklarieren

Unterprogramme können in der Assemblerprogrammierung als NEAR und FAR Prozeduren deklariert werden.

Standardmäßig wird NEAR verwendet:

name PROC
name ENDP


Man kann NEAR aber auch explizit angeben:

name PROC NEAR
name ENDP


Die Deklaration von FAR ist ähnlich:

name PROC FAR
name ENDP

NEAR-Prozeduren befinden sich im gleichen Segment (Intrasegment) und haben nur einen anderen Offset. FAR-Prozeduren liegen außerhalb des Segments (Intersegment) und haben ebenfalls einen anderen Offset.

Eselsbrücke: Intranet = innerhalb, Internet = außerhalb

Gefunden in „Technische Informatik 1: Grundlagen der Informatik und Assemblerprogrammierung“ von Thomas Müller (ISBN: 372813001X).

Fatal: No program entry point

Wenn der Turbo Linker den Fehler „Fatal: No program entry point“ meldet, liegt das daran, dass man keine Einstiegsmarke für das Programm definiert hat.

Beispiel:

.MODEL
.STACK
.DATA
.CODE

Progammzeile 1
Progammzeile 2

Progammzeile n

END

Das lässt sich ändern, in dem man vor die erste „sinnvolle“ Anweisung eine selbstdefinierte Marke setzt und diese Marke dann nach dem END angibt.

Beispiel mit Marke „anfang„:

.MODEL
.STACK
.DATA
.CODE

anfang: Progammzeile 1
Progammzeile 2

Progammzeile n

END anfang

Assembler, Linker und Debugger

Wer sich mit der maschienenorientierten Programmierung befasst, der braucht zum Ausführen seines Assembler-Codes (*.asm) einen Assembler und einen Linker. Leider ist der Turbo Assembler lizenzpflichtig.

Deswegen empfehle ich als Alternative den LZASM (Lazy Assembler) und ALINK. Beide Programme können unter Windows XP über die Kommandozeile (cmd) ausgeführt werden. LZASM und ALINK sowie eine WIN32.LIB sollten sich im selben Ordner befinden. Danach kann über die Konsole wie folgt gelinkt werden:

lzasm hello.asm
alink -oPE hello.obj win32.lib

Das Ergebnis ist eine ausführbare hello.exe. Mit dem Turbo Debugger for DOS kann man dann eine Pentium Pro CPU mit 16 Bit Registern emulieren und seinen Programmcode testen. Der Turbo Debugger for Win32 hat sogar einen 32 Bit Registersatz.

Zum Schreiben des Quelltexts (*.asm) empfehle ich Notepad++.