|
86REL(5) XENIX System V (1 ÿíâapÿ 1989)
ÍÀÇÂÀÍÈÅ
86rel - Ôopìaò oáúeêòíoão ìoäyëÿ, ïpèíÿòûé äëÿ ïpoöeccopa
Intel 8086.
ÑÈÍÒÀÊÑÈÑ
#include <sys/relsym86.h>
ÎÏÈÑÀÍÈÅ
Ôopìaò, ïpèíÿòûé äëÿ ïpoöeccopa Intell 8086, èëè 86rel,
ïpeäcòaâëÿeò coáoé oáúeêòíûé ìoäyëü , coçäaâaeìûé
acceìáëepoì masm(1) è ÿâëÿeòcÿ âxoäíûì ôaéëoì äëÿ peäaêòopa
câÿçeé ld(1). Maêpoôaéë relsym86.h coäepæèò oïècaíèÿ, ïpè
ïoëy÷eíèè â peçyëüòaòe òpaícëÿöèè c ÿçûêa Cè ôaéëa â ôopìaòe
86rel. Oïècaíèe òexíè÷ecêèx ïoäpoáíocòeé ôopìaòa 86rel
cìoòpè â Intel 8086 ObjectModuleFormatExternal Product
Specification.
Ôopìaò 86rel cocòoèò èç çaïèceé ïepeìeííoé äëèíû. Kaæäaÿ
çaïècü èìeeò ïo êpaéíeé ìepe òpè ïoëÿ: òèï çaïècè, äëèía è
êoíòpoëüíaÿ cyììa. Ïepâûé áaéò âceãäa coäepæèò òèï çaïècè.
Cyùecòâyeò òpèäöaòü oäèí paçëè÷íûé òèï çaïèceé. Toëüêo
oäèííaäöaòü èç íèx ècïoëüçyeòcÿ peäaêòopoì câÿçeé ld(1) è
masm(1). Cëoâo, pacïoëoæeííoe ïocëe ïepâoão áaéòa
ïpeäcòaâëÿeò coáoé äëèíy çaïècè â áaéòax;ïpè âû÷ècëeíèè
äëèíû ïepâûe òpè áaéòa íe y÷èòûâaþòcÿ .Äaëee cëeäyþò oäío
èëè íecêoëüêo ïoëeé. Kaæäûé òèï çaïècè coäepæèò
cïeöèôè÷ecêyþ ïocëeäoâaòeëüíocòü ïoëeé paçëè÷íoé äëèíû,
íeêoòopûe èç êoòopûx ìoãyò áûòü íeoáÿçaòeëüíûìè èëè . Caìûé
ïocëeäíèé áaéò êaæäoé çaïècè coäepæèò êoíòpoëüíyþ cyììy.
Áaéò êoíòpoëüíoé cyììû ôopìèpyeòcÿ êaê cyììa ïo ìoäyëþ 256
âcex äpyãèx áaéò çaïècè. Cyììa ïo ìoäyëþ 256 âcex áaéò
çaïècè, âêëþ÷aÿ è áaéò êoíòpoëüíoé cyììû, äoëæía áûòü paâía
íyëþ.
Ça íeêoòopûì ècêëþ÷eíèeì, ïepâûé áaéò còpoêè 86rel coäepæèò
÷ècëo oò 0 äo 40, êoòopoe oïpeäeëÿeò ocòaâøyþcÿ äëèíy còpoêè
â áaéòax è còpoêa íe coäepæèò çaâepøaþùèx íyëeé (BHÈMAHÈE! B
äaëüíeéøeì âce còpoêè, oïècûâaeìûe â äoêyìeíòe èìeþò òaêoé
ôopìaò!). Xoòÿ â oïècaíèè Intel ïpeäycìoòpeío ècïoëüçoâaíèe
òoëüêo cèìâoëoâ âepxíeão peãècòpa êëaâèaòypâû è cèìâoëoâ
`?', `@', `:' è `_' acceìáëep masm(1) ècïoüçyeò ïoëíûé
íaáop ASCII cèìâoëoâ.
Oïpeäeëeíèe Intel Object Module Format (OMF) ècïoëüçyeò
òepìèí "èíäeêc" èëè äëÿ oáoçía÷eíèÿ ïoëoæèòeëüíûx äecÿòè÷íûx
÷èceë oò 0 äo 127 èëè oò 128 äo 32,768. Ýòa æe òepìèíoëoãèÿ
coxpaíeía â äaííoì äoêyìeíòe è âo âceé ëèòepaòype ïo 86rel.
Èíäeêc ïpeäcòaâëÿeòcÿ oäíèì èëè äâyìÿ áaéòaìè. Ecëè ïepâûé
áaéò èìeeò íyëeâoé ïepâûé áèò, èíäeêc ïpeäcòaâëeí òoëüêo
oäíèì áaéòoì, è ocòaòoê áaéòa ïpeäcòaâëÿeò ïoëoæèòeëüíoe
äecÿòè÷íoe ÷ècëo, pacïoëoæeííoe ìeæäy 0 è 127. Ecëè âòopoé
áaéò èìeeò eäèíè÷íûé ïepâûé áèò, èíäeêc ïpeäcòaâëeí äâyìÿ
áaéòaìè è ocòaòoê cëoâa coäepæèò ïoëoæèòeëüíoe äecÿòè÷íoe
÷ècëo, pacïoëoæeííoe ìeæäy 128 è 32.768.
Hèæe ïpèâeäeí cïècoê òèïoâ çaïèceé è øecòíaäöaòèpè÷íûe
âeëè÷èíû èx ïepâoão áaéòa, oïpeäeëeííûx â ôaéëe relsym86.h
#define MRHEADR 0x6e /*çaãoëoâoê oáúeêòíoão ìoäyëÿ */
#define MRDGINT 0x70 /*èíèöèaëèçaöèÿ peãècòpoâ*/
#define MREDATA 0x72 /*ÿâío oïpeäeëeííûe äaííûe*/
#define MRIDATA 0x74 /*ïoâòopÿeìûe äaííûe*/
#define MOVLDEF 0x76 /*oïècaíèe ïepeêpûòèÿ*/
#define MENDREC 0x78 /*çaïècü êoíöa áëoêa èëè ïepeêpûòèÿ*/
#define MBLKDEF 0x7a /*oïècaíèe áëoêa*/
#define MBLKEND 0x7c /*êoíeö áëoêa*/
#define MDEBSYM 0x7e /*cèìâoëû oòëaäêè*/
#define MTHEADR 0x80 /*çaãoëoâoê ìoäyëÿ, oáû÷ío
ïepâûé â oáúeêòíoì ôaéëe*/
#define MLHEADR 0x82 /*çaãoëoâoê ìoäyëÿ câÿçè*/
#define MPEDATA 0x84 /*aácoëþòíûe äaííûe*/
#define MPIDATA 0x86 /*aácoëþòíûe ïoâòopÿeìûe äaííûx*/
#define MCOMENT 0x88 /*çaïècü êoììeòapèÿ*/
#define MMODEND 0x8a /*çaïècü êoíöa ìoäyëÿ*/
#define MEXTDEF 0x8c /*âíeøíèe oïècaíèÿ*/
#define MTYPDEF 0x8e /*oïècaíèÿ òèïa*/
#define MPUBDEF 0x90 /*ãëoáaëüíûe oïècaíèÿ*/
#define MLOCSYM 0x92 /*ëoêaëüíûe cèìâoëû*/
#define MLINNUM 0x94 /*íoìep còpoêè ècxoäíoão òeêcòa*/
#define MLNAMES 0x96 /*çaïècü cïècêa èìeí*/
#define MSEGDEF 0x98 /*oïècaíèe ceãìeíòa*/
#define MGRPDEF 0x9a /*oïècaíèe ãpyïïû*/
#define MFIXUPP 0x9c /*èíôopìaöèÿ o íacòpoéêe
ïepeìecòèìûx äaííûx*/
#define MNONE1 0x9e /*íeò*/
#define MLEDATA 0xa0 /*ëoãè÷ecêèe äaííûe*/
#define MLIDATA 0xa2 /*ëoãè÷ecêèe ïoâòopÿeìûe äaííûe */
#define MLIBHED 0xa4 /*çaãoëoâoê áèáëèoòeêè*/
#define MLIBNAM 0xa6 /*çaïècü èìeí áèáëèoòeêè*/
#define MLIBLOC 0xa8 /*paçìeùeíèÿ ìoäyëeé áèáëèoòeêè*/
#define MLIBDIC 0xaa /*cëoâapü áèáëèoòeêè*/
#define M386END 0x86 /*çaïècü êoíöa 32 áèòíoão ìoäyëÿ*/
#define MPUB386 0x91 /*32 áèòíoe ãëoáaëüíoe oïpeäeëeíèe*/
#define MLOC386 0x93 /*32 áèòíûe ëoãè÷ecêèe cèìâoëû*/
#define MLIN386 0x95 /*32 áèòíûé íoìep ècxoäíoé còpoêè*/
#define MSEG386 0x99 /*32 áèòíoe oïècaíèe ceãìeíòa*/
#define MFIX386 0x9d /*èíôopìaöèÿ o íacòpoéêe
ïepeìecòèìûx äaííûx*/
#define MLED386 0xa1 /*32 áèòíûé ëoãè÷ecêèe äaííûe*/
#define MLID386 0xa3 /*32 áèòíûe ëoãè÷ecêèe ïoâòopÿeìûe äaííûe*/
B äaëüíeéøeì áyäyò oïècaíû ocoáeííocòè êaæäoão òèïa çaïècè.
Ecëè çaïècü íe ècïoëüçyeòcÿ íè masm(1), íè ld(1), oía íe
oïècaía.
- THEADR
- Tèï çaïècè oïpeäeëÿeòcÿ çía÷eíèeì 0x80.
Çaïècü THEADR oïpeäeëÿeò èìÿ ôaéëa ècxoäíoão
ìoäyëÿ c òeêcòoì ía acceìáëepe (cì.
Çaìe÷aíèÿ). Eäèícòâeííoe ïoëe coäepæèò ïoëe
TMODULE NAME, ïoëy÷eííoe êaê base name oò
ïoëíoão èìeíè ôaéëa.
- COMENT
- Tèï çaïècè oïpeäeëÿeòcÿ çía÷eíèeì 0x88.
Çaïècü COMENT ìoæeò coäepæaòü êoìeíòapèé,
coçäaâaeìûé êoìïèëÿòopoì. Mams(1) ïoìeùaeò â
ïoëe ýòoão êoìeíòapèÿ còpoêy "XENIX 8086
ASSEMBLER."
- MODEND
- Tèï çaïècè oïpeäeëÿeòcÿ çía÷eíèeì 0x8a.
Çaïècü MODEND çaâepøaeò ìoäyëü. Oía
oïpeäeëÿeò, coäepæèò ëè òeêyùèé ìoäyëü òo÷êy
âxoäa äëÿ âûïoëíeíèÿ. Ecëè ìoäyëü ÿâëÿeòcÿ
òo÷êoé âxoäa, çaïècü MODEND oïpeäeëÿeò aäpec
òo÷êè âxoäa.
- EXTDEF
- Tèï çaïècè oïpeäeëÿeòcÿ çí÷eíèeì 0x8c. Çaïècü
EXTDEF coäepæèò èìeía è òèïû cèìâoëoâ,
oïpeäeëeííûx â äpyãèx ìoäyëÿx çaïècüþ òèïa
PUBDEF (cì. íèæe). Ýòo cooòâeòcòâyeò êëaccy
ïaìÿòè "extern" â ÿçûêe Cè. Ïoëÿ coäepæaò
oäíy èëè áoëee còpoê, ça êaæäoé còpoêoé
cëeäyeò èíäeêc. Èíäeêcû yêaçûâaþò ía çaïècè
TYPDEF, pacïoëoæeííûe paíee â ìoäyëe.
Masm(1) ãeíepèpyeò òoëüêo oäèí EXTDEF ía
êaæäûé âíeøíèé cèìâoë.
- TYPDEF
- Tèï çaïècè oïpeäeëÿeòcÿ çía÷eíèeì 0x8e.
Çaïècü TYPDEF coäepæèò oïècaíèe òèïoâ
(paçìep è aòpèáyòû xpaíeíèÿ) . Ha ýòo
oïècaíèe ìoãyò ccûëaòücÿ çaïècè EXTDEF,
PUBDEF è äpyãèe çaïècè.
- PUBDEF
- Tèï çaïècè oïpeäeëÿeòcÿ çía÷eíèeì 0x90. B
çaïècè PUBDEF coäepæèòcÿ cïècoê, cocòoÿùèé èç
oäíoão èëè áoëee èìeí, ía êoòopûe ìoãyò
ccûëaòücÿ äpyãèe ìoäyëè. Cïècêy èìeí
ïpeäøecòâyþò èíäeêc ãpyïïû è ceãìeíòa,
êoòopûe yêaçûâaþò ía ía÷aëo cïècêa ãëoáaëüíûx
ïepeìeííûx â òeêyùeì ceãìeíòe è ãpyïïe. Ecëè
èíäeêc ceãìeíòa è ãpyïïû paâíû 0, çaäaeòcÿ
íoìep frame, oïpeäeëÿþùèé aácoëþòíûé aäpec â
ìoäyëe. Cïècoê cocòoèò èç oäíoé èëè áoëee
còpoê, êaæäaÿ èç êoòopûx coäepæèò 16-áèòíoe
cìeùeíèe â òeêyùeì ceãìeíòe è èíäeêc,
yêaçûâaþùèé ía TYPDEF.
- LNAMES
- Tèï çaïècè oïpeäeëÿeòcÿ çía÷eíèeì 0x96.
Çaïècü LNAMES çaäaeò ïocëeäoâaòeëüíocòü
còpoê, êoòopûe cooòâeòcòâyþò èìeíaì,
yêaçaííûì â òeêyùeì ìoäyëe. Kaæäoe èìÿ
èíäeêcèpoâaío ïocëeäoâaòeëüío, ía÷èíaÿ c 1.
Çaïècè SEGDEF è GRDEF, pacïoëoæeííûe ça
äaííoé çaïècüþ è íaxoäÿùèecÿ â äaííoì ìoäyëe,
ïoëy÷aþò èç ýòoé çaïècè èìeía ceãìeíòoâ,
êëaccoâ, ïepeêpûòèé è ãpyïï.
- SEGDEF
- Tèï çaïècè oïpeäeëÿeòcÿ çía÷eíèeì 0x98.
Çaïècü SEGDEF coäepæèò èíäeêc, yêaçûâaþùèé ía
ceãìeíò è èíôopìaöèþ oá aäpecaöèè è aòpèáyòax
ceãìeíòa. Ýòoò èíäeêc ìoæeò áûòü ècïoëüçoâaí
äpyãèìè çaïècÿìè äëÿ ccûëoê ía ceãìeíò.
Ïepâoe cëoâo çaïècè, pacïoëoæeííoe ïocëe ïoëÿ
äëèíû, coäepæèò èíôopìaöèþ o âûpaâíèâaíèè è
êoìáèíaöèè aòpèáyòoâ ceãìeíòa. Cëeäyþùee
cëoâo oïpeäeëÿeò äëèíy ceãìeíòa â áaéòax.
Çaìeòèì, ÷òo oío çaäaeò ìaêcèìaëüíyþ äëèíy
ceãìeíòa, paâíyþ 65,536 áaéò. Äaëee cëeäyeò
èíäeêc ceãìeíò (cì. âûøe). Haêoíeö, SEGDEF
ìoæeò, ío íe oáÿçaòeëüío, coäepæaòü ïoëÿ
èíäeêcoâ êëacca è/èëè ïepeêpûòèÿ.
- FIXUPP
- Tèï çaïècè oïpeäeëÿeòcÿ çía÷eíèeì 0x9c.
Çaïècü FIXUPP oïpeäeëÿeò oäíy èëè áoëee
ìoäèôèêaöèé aäpecoâ âo âpeìÿ peäaêòèpoâaíèÿ
câÿçeé ("fixups"). Kaæäaÿ çaïècü yêaçûâaeò ía
aäpec â ïpeäûäyùeé çaïècè LEDATA (cì. íèæe).
Äëÿ òoão, ÷òoáû íacòpoèòü aäpec íeoáxoäèìo
çíaòü: paçìeùeíèe, peæèì, target è frame.
Frame è target ìoãyò áûòü çaäaíû ÿâío èëè
÷epeç ccûëêy ía yæe oïpeäeëeííyþ còpyêòypy
íacòpoéêè aäpecoâ.
- LEDATA
- Tèï çaïècè oïpeäeëÿeòcÿ çía÷eíèeì 0xa0. Ýòa
çaïècü coäepæèò íeïpepûâíûe òeêcòû èëè
äaííûe, ècïoëüçyeìûe peäaêòopoì câÿçeé äëÿ
coçäaíèÿ ïopöèè âûïoëíÿeìoão ìoäyëÿ . Ýòo
ïopöèÿ ìoæeò òpeáoâaòü äoïoëíèòeëüíûx
äeécòâèé (cì. FIXUPP) ïepeä çaãpyçêoé â
ècïoëíÿeìûé ôaéë. Ïepeä òeêcòoì èëè äaííûìè
ìoãyò pcïoëaãaòücÿ 2 ïoëÿ: èíäeêc ceãìeíòa è
cìeùeíèe. Èíäeêc ceãìeíòa (cì. INDEX)
oïpeäeëÿeò ceãìeíò, êoòopûé oïècaí â çaïècè
SEGDEF. Cìeùeíèe, ïoä xpaíeíèe êoòopoão
oòâeäeío oäío cëoâo, oïpeäeëÿeò âeëè÷èíy
cìeùeíèÿ oò ía÷aëa ýòoão ceãìeíòa.
ÑÌ. ÒÀÊÆÅ
as(1), ld(1)
ÇÀÌÅ×ÀÍÈß
Ecëè âû ïoïûòaeòecü câÿçaòü ìoäyëè, acceìáëèpoâaííûe
oäèíaêoâûìè èìeíaìè, çaãpyç÷èê áyäeò ïûòaòücÿ paçìecòèòü eão
âecü â oäèí áoëüøoé ceãìeíò. B ïpoãpaììax äëÿ ïpoöeccopa
I802286 paçìep ceãìeíòa oãpaíè÷eí âeëè÷èíoé 64K. B áoëüøèx
ïpoãpaììax paçìep peçyëüòèpyþùeão ceãìeíòa ìoæeò ïpeâûøaòü
64K. Ecëè ècïoëüçyeòcÿ ìoäeëü ïaìÿòè òèïa large, òo, ïocëe
çaâepøeíèÿ paáoòû peäaêòopa câÿçeé, ïoëy÷aeòcÿ oäèí èëè
áoëee ìoäyëeé, cocòoÿùèx èç ceãìeíòoâ, oáùèé paçìep òeêcòa
êoòopoão cyùecòâeíío ïpeâûøaeò 64K.
Cëeäoâaòeëüío, íyæío áûòü yâepeííûì, ÷òo èìÿ ìoäyëÿ, â
ïpoöecce acceìáëèpoâaíèÿ, coâïaäaeò c èìeíeì ècxoäíoão.
Èìeía ìoãyò íe coâïaäaòü, ecëè ècxoäíûé ìoäyëü áyäeò
ïpeäâapèòeëüío oápaáoòaí íe c ïoìoùüþ êoìaíäû cc(1), a,
íaïpèìep, âpy÷íyþ èëè shell-ïpoãpaììoé. Äaëee cëeäyeò
ïpèìep, íaìepeíío coäepæaùèé oøèáêy:
#incorrect
cc -E module12.c |filter >x.c
cc x.c
mv x.o module1.o
cc -E module2.c |filter >x.c
cc x.c
mv x.o module2.o
cc -E module3.c |filter >x.c
cc x.c
mv x.o module3.o
ld module1.o module2.o module3.o
×òoáû èçáeæaòü ýòoão, êaæäûé èç ìoäyëeé äoëæeí èìeòü
yíèêaëüíoe èìÿ â ìoìeíò acceìáëèpoâaíèÿ, êaê ïoêaçaío íèæe:
#correct
cc -E module1.c |filter >x.c
cc -S x.c
mv x.s module1.s
as module1.s
.
.
.
ld module1.o module2.o module3.o
|
|