This source PF generates EuroAssembler output object file in program format COM.
pfcom PROGRAM FORMAT=COFF,MODEL=FLAT,WIDTH=32 INCLUDEHEAD "euroasm.htm" ; Interface (structures, symbols and macros) of other modules.
pfcom HEAD ; Start module interface.
ENDHEAD pfcom ; End of module interface.
DS:0
points to 256 bytes long Program Segment Prefix (PSP).
PROGRAM FILEALIGN=
(default=0),PROGRAM SECTIONALIGN=
(default=0),SEGMENT ALIGN=
(default=16).PURPOSE=BSS|STACK
), their contents is not emitted to image file at all.
However, if some initialized data or code follows, BSS|STACK segment is emitted as zero-initialized data.
PfcomCompile Procedure OutputStream, Pgm MOV EBX,[%Pgm] Invoke PgmCreateImplicitGroups::,EBX Invoke RelocSort::,EBX Invoke PgmOrderSegments::,EBX Invoke SssGetSegm::,EBX,sssPurposeCODE JC .E7723: ; Check program entry. Invoke PgmEvalEntry::,EBX LEA EDI,[EBX+PGM.EntryExp] Invoke ExpReportError::,EDI JBE .10: ; Entry was explicitly specified. Check if it is 256. CMP EAX,[EDI+EXP.Seg] JNE .E7723: CMPD [EDI+EXP.Low],100h JE .10: .E7723:Msg '7723',EAX ; Program format COM requires fixed entry point at [!1S]:100h. .10: MOV [EDI+EXP.Seg],EAX MOVD [EDI+EXP.Low],100h MOVD [EDI+EXP.High],0 MOVD [EDI+EXP.Status],'A' ; Check program ImageBase. SUB EAX,EAX CMP [EBX+PGM.Pgmopt+PGMOPT.ImageBaseLow],EAX Msg cc=NZ,'7724' ; Program format COM requires fixed Imagebase=0. MOV [EBX+PGM.Pgmopt+PGMOPT.ImageBaseLow],EAX MOV [EBX+PGM.Pgmopt+PGMOPT.ImageBaseHigh],EAX Invoke PgmLinkImage::,EBX,0 Invoke PgmConcatenateImage::,EBX BufferRetrieve EAX ADD ESI,256 SUB ECX,256 JNB .80: Msg '9341' ; Internal error: invalid COM file size. .80: StreamStore [%OutputStream],ESI,ECX EndProcedure PfcomCompile
PfcomLoadPgm Procedure BasePgm, ObjBegin, ObjSize, FileNamePtr Msg '8534',Dict_FormatCOM::,[%FileNamePtr] ; Format !1S of file "!2$" is not linkable. EndProcedure PfcomLoadPgm
ENDPROGRAM pfcom