EN STOMME F�R K�LLKOD TILL EN .COM-FIL
--------------------------------------
K�llkoden till en blivande .COM-fil kan skrivas p� olika s�tt.
Det g�ller att s� snart som m�jligt finna den form som passar
just Dig. Det betyder att den form som presenteras nedan inte
m�ste f�ljas till punkt och pricka, utan h�r finns utrymme f�r
variationer. Ett program b�r emellertid vara strukturerat i
vilket fall som helst.
1. Man inleder alltid med 'TITLE' f�ljt av programnamn.
2. Som bekant anv�ndes EQUATES dvs symboliska namn f�r att g�ra
programmet l�ttl�st. Dessa placeras l�mpligen efter 'TITLE'.
3. H�r kommer en sv�r passage, n�mligen att p� ett f�r DOS
begripligt s�tt tala om hur vi t�nkt oss detta med segmenten.
Detta f�r att DOS sedan skall placera in v�rt program p� l�mpligt
st�lle i minnet.
4. Datadeklarationer kan d�refter l�mpligen placeras in. Alternativt
reserveras h�r plats i minnet genom direktivet:
Buffer DB/DW/DD X dup (0)/?
En dataarea om X Bytes/Words eller DoubleWords reserveras och
fylls med 0:or/godtyckligt inneh�ll.
5. F�rst nu �r vi framme vid sj�lva huvudprogrammet, dvs
programkoden.
6. P� ett korrekt s�tt skall vi omtala att programmet �r avslutat.
Konkret kan det sagda skrivas enligt nedan.
Syntaxen f�r att beskriva f�r DOS att vi avser att placera s�v�l
programkod som dataarea i segmentet med det fiktiva namnet CSEG
�r f�ljande:
CSEG SEGMENT
vilket betyder att vi ben�mner segmentet som vi avser att anv�nda
f�r v�r kod och v�r data CSEG (beteckningen v�ljes godtyckligt)
Beteckningen SEGMENT �r d�remot ett reserverat, obligatoriskt
ord. Sedan vi nu valt ett namn p� v�rt segment skall vi tala om
f�r DOS att vi avser att arbeta i detta segment. Det g�r vi via
assemblerdirektivet ASSUME varvid syntaxen �r nedan angivna:
ASSUME CS:CSEG,DS:CSEG
N�r det g�ller .COM-filer arbetar vi ju endast i ett segment och
normalt uppst�r inte n�gra komplikationer kring anv�ndandet av
dessa tv� samh�rande direktiv.
Eftersom vi kommer att skapa en .COM-fil s� beh�ver vi inte
definiera Stack-segmentet. Det s�ttes av DOS automatiskt till
SSSS:FFFE, dvs h�gst upp inom 64k-arean.
Eftersom MASM kan skapa underlag f�r mer �n en filtyp, m�ste vi
tala om att vi �syftar att v�rt program skall b�rja i minnescell
100h. Den deklarationen g�rs omedelbart efter
'ASSUME'-direktivet. Direktivet om startadressen sker via det
reserverade ordet 'ORG'. Det betyder att i alla k�llkoder som
efter bearbetning skall bli .COM-filer m�ste vi efter
ASSUME-direktivet ange:
ORG 100h
TITLE Test2.ASM
;---------------------------------------------------------------------------
;===== EQUATES ======
LF EQU 0Ah
;---------------------------------------------------------------------------
CSEG SEGMENT
ASSUME CS:CSEG,DS:CSEG
ORG 100h
Start: jmp Begin
;---------------------------------------------------------------------------
Buffer dw 1 dup (0)
;===========================================================================
;===== Huvudprogram
Main PROC NEAR
mov ax,1234h
mov buffer,ax
mov bx,buffer
ret
Main ENDP
;============================================================================
Begin: call Main
ret ; -> DOS
;----------------------------------------------------------------------------
CSEG ENDS
END Start
;----------------------------------------------------------------------------