EL(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ì è ÿâëÿeòcÿ âxoäíûì ôaéëoì äëÿ peäaêòopa câÿçeé . 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é è . 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 è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ÿ íè , íè , 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.
ÑÌ. ÒÀÊÆÅ
,
ÇÀÌÅ×ÀÍÈß
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íäû , 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
|
|
Ñîäåðæàíèå ðàçäåëà