Test t7938:
Compile to MZ linking from 2 OMF in LARGE model, ungrouped unaligned segments.
- Tested procedures
-
PgmLinkImage
SssRelocateSegment
- Source & expected listing
t7938.htm.lst
-
| | EUROASM LIST=ON,DUMP=ON,DUMPWIDTH=22
|4C41524745 |%MODEL %SET LARGE
| |t7938A PROGRAM FORMAT=OMF,MODEL=%MODEL,LISTMAP=ON,LISTGLOBALS=ON
| | GLOBAL PtrAA,PtrAB,PtrBA,PtrBB,TxtAA,TxtBB,Write,WriteFromA,WriteFromB
|[DATA] |[DATA] SEGMENT WIDTH=16,PURPOSE=DATA,COMBINE=PUBLIC,ALIGN=WORD
|0000:AAAA | DW 0xAAAA
|0002:[0600] |PtrAA DW TxtAA
|0004:[0000] |PtrAB DW TxtBB
|0006:41412024 |TxtAA DB "AA $"
|[CODE] |[CODE] SEGMENT WIDTH=16,PURPOSE=CODE,COMBINE=PUBLIC,ALIGN=BYTE
|0000:90 | NOP
|0001: |WriteFromA PROC
|0001:BA[0600] | MOV DX,TxtAA
|0004:9A[0000]{0000} | CALL Write
|0009:BA[0000] | MOV DX,TxtBB
|000C:9A[0000]{0000} | CALL Write
|0011:8B16[0200] | MOV DX,[PtrAA]
|0015:9A[0000]{0000} | CALL Write
|001A:8B16[0400] | MOV DX,[PtrAB]
|001E:9A[0000]{0000} | CALL Write
|0023:8B16[0000] | MOV DX,[PtrBA]
|0027:9A[0000]{0000} | CALL Write
|002C:8B16[0000] | MOV DX,[PtrBB]
|0030:9A[0000]{0000} | CALL Write
|0035:CB | RET
|0036: | ENDP WriteFromA
| | ENDPROGRAM t7938A
| **** ListMap "t7938A.obj",groups=0,segments=2,entry=,stack=
| [DATA],RVA=00000000h,size=0000000Ah=10,width=16,align=2,purpose=DATA
| [CODE],RVA=00000000h,size=00000036h=54,width=16,align=1,purpose=CODE
| **** ListGlobals "t7938A.obj",Global=0,Public=4,Extern=5,eXport=0,Import=0
| PtrAA,[DATA]:00000002h,scope='P'
| PtrAB,[DATA]:00000004h,scope='P'
| PtrBA,[PtrBA]:00000000h,scope='E'
| PtrBB,[PtrBB]:00000000h,scope='E'
| TxtAA,[DATA]:00000006h,scope='P'
| TxtBB,[TxtBB]:00000000h,scope='E'
| Write,[Write]:00000000h,scope='E'
| WriteFromA,[CODE]:00000001h,scope='P'
| WriteFromB,[WriteFromB]:00000000h,scope='E'
| |t7938B PROGRAM FORMAT=OMF,MODEL=%MODEL,LISTMAP=ON,LISTGLOBALS=ON
| | GLOBAL PtrAA,PtrAB,PtrBA,PtrBB,TxtAA,TxtBB,Write,WriteFromA,WriteFromB
|[DATA] |[DATA] SEGMENT WIDTH=16,PURPOSE=DATA,COMBINE=PUBLIC,ALIGN=WORD
|0000:BBBB | DW 0xBBBB
|0002:[0000] |PtrBA DW TxtAA
|0004:[0600] |PtrBB DW TxtBB
|0006:42422024 |TxtBB DB "BB $"
|[CODE] |[CODE] SEGMENT WIDTH=16,PURPOSE=CODE,COMBINE=PUBLIC,ALIGN=BYTE
|0000:90 | NOP
|0001: |WriteFromB PROC
|0001:BA[0000] | MOV DX,TxtAA
|0004:9A[3600]{0000} | CALL Write
|0009:BA[0600] | MOV DX,TxtBB
|000C:9A[3600]{0000} | CALL Write
|0011:8B16[0000] | MOV DX,[PtrAA]
|0015:9A[3600]{0000} | CALL Write
|001A:8B16[0000] | MOV DX,[PtrAB]
|001E:9A[3600]{0000} | CALL Write
|0023:8B16[0200] | MOV DX,[PtrBA]
|0027:9A[3600]{0000} | CALL Write
|002C:8B16[0400] | MOV DX,[PtrBB]
|0030:9A[3600]{0000} | CALL Write
|0035:CB | RET
|0036: | ENDP WriteFromB
|0036: |Write PROC
|0036:B409 | MOV AH,09h
|0038:CD21 | INT 21h
|003A:CB | RET
|003B: | ENDP Write
| | ENDPROGRAM t7938B
| **** ListMap "t7938B.obj",groups=0,segments=2,entry=,stack=
| [DATA],RVA=00000000h,size=0000000Ah=10,width=16,align=2,purpose=DATA
| [CODE],RVA=00000000h,size=0000003Bh=59,width=16,align=1,purpose=CODE
| **** ListGlobals "t7938B.obj",Global=0,Public=5,Extern=4,eXport=0,Import=0
| PtrAA,[PtrAA]:00000000h,scope='E'
| PtrAB,[PtrAB]:00000000h,scope='E'
| PtrBA,[DATA]:00000002h,scope='P'
| PtrBB,[DATA]:00000004h,scope='P'
| TxtAA,[TxtAA]:00000000h,scope='E'
| TxtBB,[DATA]:00000006h,scope='P'
| Write,[CODE]:00000036h,scope='P'
| WriteFromA,[WriteFromA]:00000000h,scope='E'
| WriteFromB,[CODE]:00000001h,scope='P'
| |t7938 PROGRAM FORMAT=MZ,MODEL=%MODEL,LISTMAP=ON,LISTGLOBALS=ON,LISTLITERALS=ON,ENTRY=Start:
| | GLOBAL PtrAA,PtrAB,PtrBA,PtrBB,TxtAA,TxtBB,Write,WriteFromA,WriteFromB
|[STACK] |[STACK] SEGMENT WIDTH=16,PURPOSE=STACK,COMBINE=STACK
|0000:..............~| D 32*WORD
|[CODE] |[CODE] SEGMENT WIDTH=16,PURPOSE=CODE,COMBINE=PUBLIC,ALIGN=BYTE
|0000:90 | NOP
|0001:B8{0000} |Start: MOV AX,PARA#PtrAA
|0004:8ED8 | MOV DS,AX
|0006:BA[0400] | MOV DX,=B"AA BB AA BB AA BB AA BB AA BB AA BB expected.$"
|0009:9A[0000]{0000} | CALL Write
|000E:BA[0000] | MOV DX,=D(0x240A0D)
|0011:9A[0000]{0000} | CALL Write
|0016:9A[0000]{0000} | CALL WriteFromA
|001B:9A[0000]{0000} | CALL WriteFromB
|0020:BA[3300] | MOV DX,=B"obtained.$"
|0023:9A[0000]{0000} | CALL Write
|0028:B8004C | MOV AX,4C00h
|002B:CD21 | INT 21h
| | LINK "t7938A.obj"
| | LINK "t7938B.obj"
|[@LT4] ====ListLiterals in section [@LT4].
|0000:0D0A2400 =D(0x240A0D)
|[@LT1] ====ListLiterals in section [@LT1].
|0004:41412042422041~=B"AA BB AA BB AA BB AA BB AA BB AA BB expected.$"
|0033:6F627461696E65~=B"obtained.$"
| |ENDPROGRAM t7938
|# I0560 Linking OMF module ".\t7938A.obj".
|# I0560 Linking OMF module ".\t7938B.obj".
| **** ListMap "t7938.exe",groups=3,segments=3,entry=[CODE]:00000001h,stack=[STACK]:00000040h
| [DATA],RVA=00000000h,size=00000052h=82,group [DATA]
| [DATA],RVA=00000000h,size=00000052h=82,width=16,align=16,purpose=DATA+LITERAL
| [CODE],RVA=00000052h,size=0000009Eh=158,group [CODE]
| [CODE],RVA=00000052h,size=0000009Eh=158,width=16,align=1,purpose=CODE
| [STACK],RVA=000000F0h,size=00000040h=64,group [STACK]
| [STACK],RVA=000000F0h,size=00000040h=64,width=16,align=16,purpose=STACK
| **** ListGlobals "t7938.exe",Global=9,Public=1,Extern=0,eXport=0,Import=0
| PtrAA,[DATA]:00000040h,RVA=00000040h,scope='G'
| PtrAB,[DATA]:00000042h,RVA=00000042h,scope='G'
| PtrBA,[DATA]:0000004Ah,RVA=0000004Ah,scope='G'
| PtrBB,[DATA]:0000004Ch,RVA=0000004Ch,scope='G'
| Start,[CODE]:00000001h,RVA=00000053h,scope='P'
| TxtAA,[DATA]:00000044h,RVA=00000044h,scope='G'
| TxtBB,[DATA]:0000004Eh,RVA=0000004Eh,scope='G'
| Write,[CODE]:00000099h,RVA=000000EBh,scope='G'
| WriteFromA,[CODE]:0000002Eh,RVA=00000080h,scope='G'
| WriteFromB,[CODE]:00000064h,RVA=000000B6h,scope='G'
- Expected messages
t7938.out
I0180 Assembling source file "t7938.htm".
I0270 Assembling source "t7938".
I0310 Assembling source pass 1.
I0330 Assembling source pass 2 - final.
I0470 Assembling program "t7938A". "t7938.htm"{52}
I0510 Assembling program pass 1. "t7938.htm"{52}
I0510 Assembling program pass 2. "t7938.htm"{52}
I0530 Assembling program pass 3 - final. "t7938.htm"{52}
I0660 16bit LARGE OMF file "t7938A.obj" created, size=345. "t7938.htm"{76}
I0650 Program "t7938A" assembled in 3 passes with errorlevel 0. "t7938.htm"{76}
I0470 Assembling program "t7938B". "t7938.htm"{90}
I0510 Assembling program pass 1. "t7938.htm"{90}
I0510 Assembling program pass 2. "t7938.htm"{90}
I0510 Assembling program pass 3. "t7938.htm"{90}
I0530 Assembling program pass 4 - final. "t7938.htm"{90}
I0660 16bit LARGE OMF file "t7938B.obj" created, size=354. "t7938.htm"{119}
I0650 Program "t7938B" assembled in 4 passes with errorlevel 0. "t7938.htm"{119}
I0470 Assembling program "t7938". "t7938.htm"{133}
I0510 Assembling program pass 1. "t7938.htm"{133}
I0510 Assembling program pass 2. "t7938.htm"{133}
I0530 Assembling program pass 3 - final. "t7938.htm"{133}
I0560 Linking OMF module ".\t7938A.obj". "t7938.htm"{158}
I0560 Linking OMF module ".\t7938B.obj". "t7938.htm"{158}
I0660 16bit LARGE MZ file "t7938.exe" created, size=400. "t7938.htm"{158}
I0650 Program "t7938" assembled in 3 passes with errorlevel 0. "t7938.htm"{158}
I0750 Source "t7938" (212 lines) assembled in 2 passes with errorlevel 0.
I0860 Listing file "t7938.htm.lst" created, size=6758.
I0990 EuroAssembler terminated with errorlevel 0.
▲Back to the top▲