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 ;---------------------------------------------------------------------------- .