EuroAssembler Index Manual Download Source Macros


Sitemap Links Forum Tests Projects

Test t7940: Compile to MZ linking from 3 OMF in SMALL model, ungrouped unaglined segments.


Description
Linking of three modules with mutual relocations. Executable as t7940.exe.
Tested procedures
PgmCombine   SssCombine   RelocCombine   PgmLinkImage   PfmzCompile  
Source & expected listing t7940.htm.lst
| | EUROASM LIST=ON,DUMP=ON,DUMPALL=OFF,DUMPWIDTH=22 |534D414C4C |%MODEL %SET SMALL |50747241412C50747241|%GLBLIST %SET PtrAA,PtrAB,PtrAC,PtrBA,PtrBB,PtrBC,PtrCA,PtrCB,PtrCC, \ |422C50747241432C50~~| TxtAA,TxtBB,TxtCC,Write,WriteFromA,WriteFromB,WriteFromC | |t7940A PROGRAM FORMAT=OMF,MODEL=%MODEL,LISTMAP=ON,LISTGLOBALS=ON | | GLOBAL %GLBLIST |[DATA] |[DATA] SEGMENT WIDTH=16,PURPOSE=DATA,COMBINE=PUBLIC,ALIGN=WORD |0000:AAAA | DW 0xAAAA |0002:[0800] |PtrAA DW TxtAA |0004:[0000] |PtrAB DW TxtBB |0006:[0000] |PtrAC DW TxtCC |0008:4124 |TxtAA DB "A$" |000A:AA | DB 0xAA |[CODE] |[CODE] SEGMENT WIDTH=16,PURPOSE=CODE,COMBINE=PUBLIC,ALIGN=BYTE |0000:90 | NOP |0001: |WriteFromA PROC |0001:BA[0800] | MOV DX,TxtAA |0004:E8(0000) | CALL Write |0007:BA[0000] | MOV DX,TxtBB |000A:E8(0000) | CALL Write |000D:BA[0000] | MOV DX,TxtCC |0010:E8(0000) | CALL Write |0013:8B16[0200] | MOV DX,[PtrAA] |0017:E8(0000) | CALL Write |001A:8B16[0400] | MOV DX,[PtrAB] |001E:E8(0000) | CALL Write |0021:8B16[0600] | MOV DX,[PtrAC] |0025:E8(0000) | CALL Write |0028:8B16[0000] | MOV DX,[PtrBA] |002C:E8(0000) | CALL Write |002F:8B16[0000] | MOV DX,[PtrBB] |0033:E8(0000) | CALL Write |0036:8B16[0000] | MOV DX,[PtrBC] |003A:E8(0000) | CALL Write |003D:8B16[0000] | MOV DX,[PtrCA] |0041:E8(0000) | CALL Write |0044:8B16[0000] | MOV DX,[PtrCB] |0048:E8(0000) | CALL Write |004B:8B16[0000] | MOV DX,[PtrCC] |004F:E8(0000) | CALL Write |0052:C3 | RET |0053: | ENDP WriteFromA |[STACK] |[STACK] SEGMENT WIDTH=16,PURPOSE=STACK,COMBINE=STACK |0000:..............~| D 32*WORD | | ENDPROGRAM t7940A | **** ListMap "t7940A.obj",groups=0,segments=3,entry=,stack=[STACK]:00000040h | [DATA],RVA=00000000h,size=0000000Bh=11,width=16,align=2,purpose=DATA | [CODE],RVA=00000000h,size=00000053h=83,width=16,align=1,purpose=CODE | [STACK],RVA=00000000h,size=00000040h=64,width=16,align=16,purpose=STACK | **** ListGlobals "t7940A.obj",Global=0,Public=5,Extern=11,eXport=0,Import=0 | PtrAA,[DATA]:00000002h,scope='P' | PtrAB,[DATA]:00000004h,scope='P' | PtrAC,[DATA]:00000006h,scope='P' | PtrBA,[PtrBA]:00000000h,scope='E' | PtrBB,[PtrBB]:00000000h,scope='E' | PtrBC,[PtrBC]:00000000h,scope='E' | PtrCA,[PtrCA]:00000000h,scope='E' | PtrCB,[PtrCB]:00000000h,scope='E' | PtrCC,[PtrCC]:00000000h,scope='E' | TxtAA,[DATA]:00000008h,scope='P' | TxtBB,[TxtBB]:00000000h,scope='E' | TxtCC,[TxtCC]:00000000h,scope='E' | Write,[Write]:00000000h,scope='E' | WriteFromA,[CODE]:00000001h,scope='P' | WriteFromB,[WriteFromB]:00000000h,scope='E' | WriteFromC,[WriteFromC]:00000000h,scope='E' | |t7940B PROGRAM FORMAT=OMF,MODEL=%MODEL,LISTMAP=ON,LISTGLOBALS=ON | | GLOBAL %GLBLIST |[DATA] |[DATA] SEGMENT WIDTH=16,PURPOSE=DATA,COMBINE=PUBLIC,ALIGN=WORD |0000:BBBB | DW 0xBBBB |0002:[0000] |PtrBA DW TxtAA |0004:[0800] |PtrBB DW TxtBB |0006:[0000] |PtrBC DW TxtCC |0008:4224 |TxtBB DB "B$" |000A:BB | DB 0xBB |[CODE] |[CODE] SEGMENT WIDTH=16,PURPOSE=CODE,COMBINE=PUBLIC,ALIGN=BYTE |0000:90 | NOP |0001: |WriteFromB PROC |0001:BA[0000] | MOV DX,TxtAA |0004:E8(0000) | CALL Write |0007:BA[0800] | MOV DX,TxtBB |000A:E8(0000) | CALL Write |000D:BA[0000] | MOV DX,TxtCC |0010:E8(0000) | CALL Write |0013:8B16[0000] | MOV DX,[PtrAA] |0017:E8(0000) | CALL Write |001A:8B16[0000] | MOV DX,[PtrAB] |001E:E8(0000) | CALL Write |0021:8B16[0000] | MOV DX,[PtrAC] |0025:E8(0000) | CALL Write |0028:8B16[0200] | MOV DX,[PtrBA] |002C:E8(0000) | CALL Write |002F:8B16[0400] | MOV DX,[PtrBB] |0033:E8(0000) | CALL Write |0036:8B16[0600] | MOV DX,[PtrBC] |003A:E8(0000) | CALL Write |003D:8B16[0000] | MOV DX,[PtrCA] |0041:E8(0000) | CALL Write |0044:8B16[0000] | MOV DX,[PtrCB] |0048:E8(0000) | CALL Write |004B:8B16[0000] | MOV DX,[PtrCC] |004F:E8(0000) | CALL Write |0052:C3 | RET |0053: | ENDP WriteFromB |0053:90 | nop |0054:90 | nop |0055:B8{0000} |Start::MOV AX,PARA#PtrAA |0058:8ED8 | MOV DS,AX |005A:BA[1000] | MOV DX,=B"ABCABCABCABCABCABCABCABCABCABCABCABC expected.$" |005D:E8(0000) | CALL Write |0060:BA[0C00] | MOV DX,=D(0x240A0D) |0063:E8(0000) | CALL Write |0066:E8(0000) | CALL WriteFromA |0069:E895FF | CALL WriteFromB |006C:E8(0000) | CALL WriteFromC |006F:BA[4000] | MOV DX,=B" obtained.$" |0072:E8(0000) | CALL Write |0075:B8004C | MOV AX,4C00h |0078:CD21 | INT 21h |[@LT4] ====ListLiterals in section [@LT4]. |000C:0D0A2400 =D(0x240A0D) |[@LT1] ====ListLiterals in section [@LT1]. |0010:41424341424341~=B"ABCABCABCABCABCABCABCABCABCABCABCABC expected.$" |0040:206F627461696E~=B" obtained.$" | | ENDPROGRAM t7940B | **** ListMap "t7940B.obj",groups=0,segments=2,entry=,stack= | [DATA],RVA=00000000h,size=0000004Ch=76,width=16,align=2,purpose=DATA | [CODE],RVA=00000000h,size=0000007Ah=122,width=16,align=1,purpose=CODE | **** ListGlobals "t7940B.obj",Global=0,Public=6,Extern=11,eXport=0,Import=0 | PtrAA,[PtrAA]:00000000h,scope='E' | PtrAB,[PtrAB]:00000000h,scope='E' | PtrAC,[PtrAC]:00000000h,scope='E' | PtrBA,[DATA]:00000002h,scope='P' | PtrBB,[DATA]:00000004h,scope='P' | PtrBC,[DATA]:00000006h,scope='P' | PtrCA,[PtrCA]:00000000h,scope='E' | PtrCB,[PtrCB]:00000000h,scope='E' | PtrCC,[PtrCC]:00000000h,scope='E' | Start,[CODE]:00000055h,scope='P' | TxtAA,[TxtAA]:00000000h,scope='E' | TxtBB,[DATA]:00000008h,scope='P' | TxtCC,[TxtCC]:00000000h,scope='E' | Write,[Write]:00000000h,scope='E' | WriteFromA,[WriteFromA]:00000000h,scope='E' | WriteFromB,[CODE]:00000001h,scope='P' | WriteFromC,[WriteFromC]:00000000h,scope='E' | |t7940C PROGRAM FORMAT=OMF,MODEL=%MODEL,LISTMAP=ON,LISTGLOBALS=ON | | GLOBAL %GLBLIST |[DATA] |[DATA] SEGMENT WIDTH=16,PURPOSE=DATA,COMBINE=PUBLIC,ALIGN=WORD |0000:CCCC | DW 0xCCCC |0002:[0000] |PtrCA DW TxtAA |0004:[0000] |PtrCB DW TxtBB |0006:[0800] |PtrCC DW TxtCC |0008:4324 |TxtCC DB "C$" |000A:CC | DB 0xCC |[CODE] |[CODE] SEGMENT WIDTH=16,PURPOSE=CODE,COMBINE=PUBLIC,ALIGN=BYTE |0000: |Write PROC |0000:B409 | MOV AH,09h |0002:CD21 | INT 21h |0004:C3 | RET |0005: | ENDP Write |0005: |WriteFromC PROC |0005:BA[0000] | MOV DX,TxtAA |0008:E8F5FF | CALL Write |000B:BA[0000] | MOV DX,TxtBB |000E:E8EFFF | CALL Write |0011:BA[0800] | MOV DX,TxtCC |0014:E8E9FF | CALL Write |0017:8B16[0000] | MOV DX,[PtrAA] |001B:E8E2FF | CALL Write |001E:8B16[0000] | MOV DX,[PtrAB] |0022:E8DBFF | CALL Write |0025:8B16[0000] | MOV DX,[PtrAC] |0029:E8D4FF | CALL Write |002C:8B16[0000] | MOV DX,[PtrBA] |0030:E8CDFF | CALL Write |0033:8B16[0000] | MOV DX,[PtrBB] |0037:E8C6FF | CALL Write |003A:8B16[0000] | MOV DX,[PtrBC] |003E:E8BFFF | CALL Write |0041:8B16[0200] | MOV DX,[PtrCA] |0045:E8B8FF | CALL Write |0048:8B16[0400] | MOV DX,[PtrCB] |004C:E8B1FF | CALL Write |004F:8B16[0600] | MOV DX,[PtrCC] |0053:E8AAFF | CALL Write |0056:C3 | RET |0057: | ENDP WriteFromC | | ENDPROGRAM t7940C | **** ListMap "t7940C.obj",groups=0,segments=2,entry=,stack= | [DATA],RVA=00000000h,size=0000000Bh=11,width=16,align=2,purpose=DATA | [CODE],RVA=00000000h,size=00000057h=87,width=16,align=1,purpose=CODE | **** ListGlobals "t7940C.obj",Global=0,Public=6,Extern=10,eXport=0,Import=0 | PtrAA,[PtrAA]:00000000h,scope='E' | PtrAB,[PtrAB]:00000000h,scope='E' | PtrAC,[PtrAC]:00000000h,scope='E' | PtrBA,[PtrBA]:00000000h,scope='E' | PtrBB,[PtrBB]:00000000h,scope='E' | PtrBC,[PtrBC]:00000000h,scope='E' | PtrCA,[DATA]:00000002h,scope='P' | PtrCB,[DATA]:00000004h,scope='P' | PtrCC,[DATA]:00000006h,scope='P' | TxtAA,[TxtAA]:00000000h,scope='E' | TxtBB,[TxtBB]:00000000h,scope='E' | TxtCC,[DATA]:00000008h,scope='P' | Write,[CODE]:00000000h,scope='P' | WriteFromA,[WriteFromA]:00000000h,scope='E' | WriteFromB,[WriteFromB]:00000000h,scope='E' | WriteFromC,[CODE]:00000005h,scope='P' | |t7940 PROGRAM FORMAT=MZ,MODEL=%MODEL,LISTMAP=ON,LISTGLOBALS=ON,LISTLITERALS=ON,ENTRY=Start:: | | LINK "t7940A.obj" | | LINK "t7940B.obj" | | LINK "t7940C.obj" | |ENDPROGRAM t7940 |# I0560 Linking OMF module ".\t7940A.obj". |# I0560 Linking OMF module ".\t7940B.obj". |# I0560 Linking OMF module ".\t7940C.obj". | **** ListMap "t7940.exe",groups=3,segments=3,entry=[CODE]:000000A8h,stack=[STACK]:00000040h | [DATA],RVA=00000000h,size=00000063h=99,group [DATA] | [DATA],RVA=00000000h,size=00000063h=99,width=16,align=2,purpose=DATA | [CODE],RVA=00000063h,size=00000124h=292,group [CODE] | [CODE],RVA=00000063h,size=00000124h=292,width=16,align=1,purpose=CODE | [STACK],RVA=00000190h,size=00000040h=64,group [STACK] | [STACK],RVA=00000190h,size=00000040h=64,width=16,align=16,purpose=STACK | **** ListGlobals "t7940.exe",Global=17,Public=0,Extern=0,eXport=0,Import=0 | PtrAA,[DATA]:00000002h,RVA=00000002h,scope='G' | PtrAB,[DATA]:00000004h,RVA=00000004h,scope='G' | PtrAC,[DATA]:00000006h,RVA=00000006h,scope='G' | PtrBA,[DATA]:0000000Eh,RVA=0000000Eh,scope='G' | PtrBB,[DATA]:00000010h,RVA=00000010h,scope='G' | PtrBC,[DATA]:00000012h,RVA=00000012h,scope='G' | PtrCA,[DATA]:0000005Ah,RVA=0000005Ah,scope='G' | PtrCB,[DATA]:0000005Ch,RVA=0000005Ch,scope='G' | PtrCC,[DATA]:0000005Eh,RVA=0000005Eh,scope='G' | Start,[CODE]:000000A8h,RVA=0000010Bh,scope='G' | TxtAA,[DATA]:00000008h,RVA=00000008h,scope='G' | TxtBB,[DATA]:00000014h,RVA=00000014h,scope='G' | TxtCC,[DATA]:00000060h,RVA=00000060h,scope='G' | Write,[CODE]:000000CDh,RVA=00000130h,scope='G' | WriteFromA,[CODE]:00000001h,RVA=00000064h,scope='G' | WriteFromB,[CODE]:00000054h,RVA=000000B7h,scope='G' | WriteFromC,[CODE]:000000D2h,RVA=00000135h,scope='G'
Expected messages t7940.out
I0180 Assembling source file "t7940.htm". I0270 Assembling source "t7940". I0310 Assembling source pass 1. I0330 Assembling source pass 2 - final. I0470 Assembling program "t7940A". "t7940.htm"{66} I0510 Assembling program pass 1. "t7940.htm"{66} I0510 Assembling program pass 2. "t7940.htm"{66} I0530 Assembling program pass 3 - final. "t7940.htm"{66} I0660 16bit SMALL OMF file "t7940A.obj" created, size=529. "t7940.htm"{106} I0650 Program "t7940A" assembled in 3 passes with errorlevel 0. "t7940.htm"{106} I0470 Assembling program "t7940B". "t7940.htm"{128} I0510 Assembling program pass 1. "t7940.htm"{128} I0510 Assembling program pass 2. "t7940.htm"{128} I0530 Assembling program pass 3 - final. "t7940.htm"{128} I0660 16bit SMALL OMF file "t7940B.obj" created, size=668. "t7940.htm"{186} I0650 Program "t7940B" assembled in 3 passes with errorlevel 0. "t7940.htm"{186} I0470 Assembling program "t7940C". "t7940.htm"{208} I0510 Assembling program pass 1. "t7940.htm"{208} I0510 Assembling program pass 2. "t7940.htm"{208} I0530 Assembling program pass 3 - final. "t7940.htm"{208} I0660 16bit SMALL OMF file "t7940C.obj" created, size=473. "t7940.htm"{250} I0650 Program "t7940C" assembled in 3 passes with errorlevel 0. "t7940.htm"{250} I0470 Assembling program "t7940". "t7940.htm"{271} I0510 Assembling program pass 1. "t7940.htm"{271} I0530 Assembling program pass 2 - final. "t7940.htm"{271} I0560 Linking OMF module ".\t7940A.obj". "t7940.htm"{275} I0560 Linking OMF module ".\t7940B.obj". "t7940.htm"{275} I0560 Linking OMF module ".\t7940C.obj". "t7940.htm"{275} I0660 16bit SMALL MZ file "t7940.exe" created, size=487. "t7940.htm"{275} I0650 Program "t7940" assembled in 2 passes with errorlevel 0. "t7940.htm"{275} I0750 Source "t7940" (377 lines) assembled in 2 passes with errorlevel 0. I0860 Listing file "t7940.htm.lst" created, size=11725. I0990 EuroAssembler terminated with errorlevel 0.
Expected output file t7940. exe
0000: 4D 5A E7 01 01 00 01 00 06 00 05 00 FF FF 19 00  MZ¤··°·°·°·°¤¤·°
0010: 40 00 C9 5E AB 00 06 00 40 00 00 00 00 00 00 00  @°¤^¤°·°@°°°°°°°
0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  °°°°°°°°°°°°°°°°
0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  °°°°°°°°°°°°°°°°
0040: AC 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00  ¤°·°°°°°°°°°°°°°
0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  °°°°°°°°°°°°°°°°
0060: AA AA 08 00 14 00 60 00 41 24 AA 00 BB BB 08 00  ¤¤·°·°`°A$¤°¤¤·°
0070: 14 00 60 00 42 24 BB 00 0D 0A 24 00 41 42 43 41  ·°`°B$¤°·¬$°ABCA
0080: 42 43 41 42 43 41 42 43 41 42 43 41 42 43 41 42  BCABCABCABCABCAB
0090: 43 41 42 43 41 42 43 41 42 43 41 42 43 41 42 43  CABCABCABCABCABC
00A0: 20 65 78 70 65 63 74 65 64 2E 24 00 20 6F 62 74  ¯expected.$°¯obt
00B0: 61 69 6E 65 64 2E 24 00 CC CC 08 00 14 00 60 00  ained.$°¤¤·°·°`°
00C0: 43 24 CC 90 BA 08 00 E8 C6 00 BA 14 00 E8 C0 00  C$¤¤¤·°¤¤°¤·°¤¤°
00D0: BA 60 00 E8 BA 00 8B 16 02 00 E8 B3 00 8B 16 04  ¤`°¤¤°¤··°¤¤°¤··
00E0: 00 E8 AC 00 8B 16 06 00 E8 A5 00 8B 16 0E 00 E8  °¤¤°¤··°¤¤°¤··°¤
00F0: 9E 00 8B 16 10 00 E8 97 00 8B 16 12 00 E8 90 00  ¤°¤··°¤¤°¤··°¤¤°
0100: 8B 16 5A 00 E8 89 00 8B 16 5C 00 E8 82 00 8B 16  ¤·Z°¤¤°¤·\°¤¤°¤·
0110: 5E 00 E8 7B 00 C3 90 BA 08 00 E8 73 00 BA 14 00  ^°¤{°¤¤¤·°¤s°¤·°
0120: E8 6D 00 BA 60 00 E8 67 00 8B 16 02 00 E8 60 00  ¤m°¤`°¤g°¤··°¤`°
0130: 8B 16 04 00 E8 59 00 8B 16 06 00 E8 52 00 8B 16  ¤··°¤Y°¤··°¤R°¤·
0140: 0E 00 E8 4B 00 8B 16 10 00 E8 44 00 8B 16 12 00  ·°¤K°¤··°¤D°¤··°
0150: E8 3D 00 8B 16 5A 00 E8 36 00 8B 16 5C 00 E8 2F  ¤=°¤·Z°¤6°¤·\°¤/
0160: 00 8B 16 5E 00 E8 28 00 C3 90 90 B8 00 00 8E D8  °¤·^°¤(°¤¤¤¤°°¤¤
0170: BA 1C 00 E8 1A 00 BA 18 00 E8 14 00 E8 45 FF E8  ¤·°¤·°¤·°¤·°¤E¤¤
0180: 95 FF E8 10 00 BA 4C 00 E8 05 00 B8 00 4C CD 21  ¤¤¤·°¤L°¤·°¤°L¤!
0190: B4 09 CD 21 C3 BA 08 00 E8 F5 FF BA 14 00 E8 EF  ¤·¤!¤¤·°¤¤¤¤·°¤¤
01A0: FF BA 60 00 E8 E9 FF 8B 16 02 00 E8 E2 FF 8B 16  ¤¤`°¤¤¤¤··°¤¤¤¤·
01B0: 04 00 E8 DB FF 8B 16 06 00 E8 D4 FF 8B 16 0E 00  ·°¤¤¤¤··°¤¤¤¤··°
01C0: E8 CD FF 8B 16 10 00 E8 C6 FF 8B 16 12 00 E8 BF  ¤¤¤¤··°¤¤¤¤··°¤¤
01D0: FF 8B 16 5A 00 E8 B8 FF 8B 16 5C 00 E8 B1 FF 8B  ¤¤·Z°¤¤¤¤·\°¤¤¤¤
01E0: 16 5E 00 E8 AA FF C3                             ·^°¤¤¤¤

▲Back to the top▲