|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Янв 19, 2004 22:24:02 · Поправил: AsmGuru62 Привет всем! Странная вещь... есть два модуля на TASM32: --- MODULE1.ASM:
.model flat
code segment page public 'CODE'
assume cs:code
...
code ends
end
--- MODULE2.ASM:
.model flat
code segment page public 'CODE'
assume cs:code
...
code ends
end
Когда линкер (TLINK32) собирает эти модули - между ними (их началами) пространство в 4096 байт. Я, конечно, понимаю, что это следствие выравнивания на page. В руководстве по линкеру сказано, что сегменты с одинаковыми атрибутами (даже если они в разных модулях) считаются одним сегментом. Так почему это не работает при выравнивании? |
|
|
Дата: Янв 20, 2004 06:16:30 AsmGuru62 У тебя оба модуля в одном сегменте. ;--- MODULE0.ASM .386 .model flat extrn m1 extrn m2 .code m0 proc call m1 call m2 ret m0 endp end m0 ;--- MODULE1.ASM .386 .model flat public m1 code segment page public 'CODE' assume cs:code m1 proc mov eax,1 ret m1 endp ends end ;--- MODULE2.ASM .386 .model flat public m2 code segment page public 'CODE' assume cs:code m2 proc mov eax,2 ret m2 endp ends end tasm32 *.asm; tlink32 -m -s -M -Tpe module0 module1 module2в результате в map-Файле Start Length Name Class 0001:00000000 000000010H _TEXT CODE 0001:00001000 000001006H CODE CODE !!! обрати внимание – сегмент один Detailed map of segments 0001:00000000 0000000D C=CODE S=_TEXT G=(none) M=module0.asm ACBP=A9 0001:00000010 00000000 C=CODE S=_TEXT G=(none) M=module1.asm ACBP=A9 0001:00000010 00000000 C=CODE S=_TEXT G=(none) M=module2.asm ACBP=A9 0001:00001000 00000006 C=CODE S=CODE G=(none) M=module1.asm ACBP=89 0001:00002000 00000006 C=CODE S=CODE G=(none) M=module2.asm ACBP=89 Address Publics by Name 0001:00001000 M1 0001:00002000 M2 Address Publics by Value 0001:00001000 M1 0001:00002000 M2При этом требование page заставляет tlink/tlink32 давать адреса m1 и m2 кратными 4096. Если использовать ilink32 ilink32 -m -s -M -Tpe module0 module1 module2то Start Length Name Class 0001:00401000 00000001EH _TEXT CODE 0002:00402000 000000008H _DATA DATA 0003:00402008 000000000H _BSS BSS 0004:00000000 000000000H _TLS TLS Detailed map of segments 0001:00000000 0000000D C=CODE S=_TEXT G=(none) M=C:\2\MODULE0.OBJ ACBP=A9 0001:00000010 00000006 C=CODE S=_TEXT G=(none) M=C:\2\MODULE1.OBJ ACBP=A9 0001:00000018 00000006 C=CODE S=_TEXT G=(none) M=C:\2\MODULE2.OBJ ACBP=A9 0002:00000008 00000008 C=DATA S=_DATA G=DGROUP M=C:\2\MODULE0.OBJ ACBP=A9 Address Publics by Name 0001:00000000 @C1_0 0001:00000010 @C2_0 0001:00000018 @C3_0 0001:00000010 M1 0001:00000018 M2 Address Publics by Value 0001:00000000 @C1_0 0001:00000010 @C2_0 0001:00000010 M1 !!! обрати внимание на адрес 0001:00000018 M2 !!! обрати внимание на адрес 0001:00000018 @C3_0 |
|
|
Дата: Янв 20, 2004 23:10:27 Thanks! |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.061 |