From: "Christopher Nelson" To: Subject: Re: How to change Executable format to my own? Date: Sat, 10 Jul 1999 10:07:50 -0600 Message-ID: <01becaee$5baacce0$d6780ed1@thendren> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 4.71.1712.3 X-MimeOLE: Produced By Microsoft MimeOLE V4.71.1712.3 Reply-To: djgpp AT delorie DOT com >: alternatively, for DJGPP programs used as boot-loaders, or for operating >: systems, you can have the compiler stick stuff where it wants to, then >: subtract the data segment base to assume a base of 0. from there it is >: simply neccessary to properly initizlise the DS segment selector properly, >: and you have 0-based data. since code is already at 0, you can just stick >: it in another similiar, but code-marked, segment. > >But it's run in protected mode so the segments are selectors. Now >different selectors can point to diffent places, but if you point them >both at base=0, and expect code at address 0 not interfere with data >at address 0, I think you're misstaken. But I'm not an assembly guy, >so I could be wrong. Please correct me if so. acoording to the Intel Systems Programming Manual, the correct term is segment selector. it's the same difference anyway. it's still a segment, it's just not a real-mode segment. the difference is that a protected-mode segment has a linear address that maps to a logical address that maps to a physical address. because of all that mapping, you can stick stuff whereever you want - so long as you get the link-ups correct. you cannot ever have a 0 selector. the 0 selector defines an exception, and will cause problems. HOWEVER, you CAN have a selector whose BASE is 0. this is what the author of the original message meant, and it is very simple to do. the only problem is that, if you use DJGPP to do it, you have to relocate the data section DOWN whatever it's offset is. -={C}=-