On Wed, Feb 06, 2002 at 06:58:47PM +0200, Stefanos Papanicolopulos wrote:
> Collins Chen wrote:
> > I encounter a problem about instruction
> > "jmp" and "call". I expect the "jmp" and
> > "call" with a 16-bit offset, but every
> > time the GCC compile them with 32-bit offset.
> > This cause the vga bios can't run. I don't
> > know how to fix it, can you help me? Thanks!
> 
> It seems your disassembler thinks the code runs
> in 32bit mode. Don't worry. As you see, GCC get's
> it right: the bytes are the same! The point is
> that E8 (call) has a 'word' as an argument. Now,
> in 16-bit mode, a word is 16bits. In 32-bit a
> 'word' is 32bits. So in 16bit mode E8 is followed
> by 2 bytes, in 32bit it is followed by 4.

I can confirm that objdump does not seem to be able to disassemble
16-bit assembly.

I have also had problems with gcc not correctly generating 16-bit code
is some cases (in mixed 16/32bit code where symbols need to be resolved
later by the linker).  I was not able to find a solution; maybe another
assembler would work better.

Reply via email to