|
îáú÷áîéå
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.
úáíåþáîéñ
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
|