EXTERNA PROCEDURER
                      ------------------

Det �r n�stan en fr�ga om en smaksak om vi skall s�tta MACRON
f�re Externa Procedurer eller tv�rtom n�r det g�ller att g�ra
assemblerprogram l�tthanterliga.

F�ljande kr�vs f�r att en Extern Procedur skall accepteras av
LINK:

* Det reserverade ordet SEGMENT m�ste f�ljas av det reserverade
ordet PUBLIC. Det medf�r att vi "f�rvarnar" om att vi t�nker
koppla samman det *ofullst�ndiga basprogrammet* med en Extern
Procedur. Dessa tv� programdelar skall sedan l�nkas samman till
en fungerande enhet. L�t oss kalla den programdel som �r
anropande f�r "basprogrammet".

* F�r att ovanst�ende sammanl�nkning skall vara m�jlig kr�ves
dessutom att det reserverade ordet EXTRN f�ljt av namnet p� den
rutin vi avser, finns med. Raden om Externa Procedurer kan
exempelvis placeras inom samma omr�de som MACRO-angivelserna.

* Sj�lva anropet av den Externa Proceduren g�res p� samma s�tt
som anropet av en Intern Procedur (CALL Proc_Namn).

* Hur skrives d� den Externa Proceduren? Jo, som exemplet nedan
visar. Man m�ste s�ledes ha samma referens p� CS-segmentet, i
detta fall C_Seg. �ven h�r anges PUBLIC vid angivandet av
segmentdefinitionen. Det nya �r att vi m�ste tala om att rutinen
skall anv�ndas av annat program genom raden:

       PUBLIC Proc_Namn

* Man talar om att C_Seg slutar samt att rutinen slutar, dock
inte p� det vanliga s�ttet med END START utan endast END. Det
beror ju p� att det inte �r ett programslut utan endast ett
rutinslut.

* Till skillnad fr�n situationen vid anv�ndande av MACRO:n, som
inneb�r att vi inte kan separatassemblera, *skall* vi skapa
Objektfiler av b�da dessa .ASM-filer. En f�r vardera .ASM-filen.

* Sedan vi skapat dessa .OBJ-filer �r det dags att l�nka samman
de tv� best�ndsdelarna till ett sammanfogat fungerande program.

* Vi skriver d�rf�r:

       LINK Bas + Extl + ...  (H�r kan flera filer l�nkas samman)

Programmet LINK skapar d� en fil Bas.EXE som sedan p� sedvanligt
s�tt konverteras till Bas.COM via EXE2BIN.

(Vi kan naturligtvis v�lja annat namn �n det som basprogrammet
har, vidare kan som antytts flera externa procedurer l�nkas in).

Nedan �r de tv� filerna 'Ex1_X.ASM' (Basprogrammet) och filen
CR_LF.ASM (den Externa Proceduren) listade. L�gg m�rke till
syntaxen f�r att l�nkningen skall vara m�jlig. Dessa tv� filer
skall nu f�rst separatassembleras via MASM, varvid filerna
Ex1_X.OBJ och CR_LF.OBJ skapas. Sammanl�nkningen sker via
programmet LINK som anropas med:

       LINK Ex1_X + CR_LF

varvid filen Ex1_X.EXE skapas. Den k�rbara filen skapas sedan p�
vanligt s�tt via EXE2BIN.

F�rst tittar vi p� "Basprogrammet":


TITLE Ex1_X.ASM
;-------------------------------------------------------------------
       INCLUDE CLS.MAC
;-------------------------------------------------------------------
       EXTRN CR_LF:NEAR                ;Detta m�ste anges
;-------------------------------------------------------------------
CSEG    SEGMENT PUBLIC
       ASSUME CS:CSEG,DS:CSEG

       ORG 100h
Start:  jmp Begin
;-------------------------------------------------------------------

       Instructions
       ...
       ...
       ...






;-------------------------------------------------------------------
Begin:
       call ...
;-------------------------------------------------------------------





Sedan tittar vi p� den Externa Proceduren:

TITLE CR_LF.ASM
;--------------------------------------------------------------------
CSEG    SEGMENT PUBLIC
       ASSUME CS:CSEG

PUBLIC CR_LF                           ;M�ste anges f�r att kunna
                                      ;l�nka samman filerna

CR_LF   PROC NEAR

       push ax
       push dx

       mov dl,0dh
       mov ah,02h
       int 21h

       mov dl,0ah
       mov ah,02h
       int 21h

       pop dx
       pop ax
       ret

CR_LF   ENDP
;------------------------------------------------------------------------
CSEG    ENDS
       END                             ;Inget END Start
;-------------------------------------------------------------------------