16-bit code in GAS
Mikulas Patocka
mikulas@artax.karlin.mff.cuni.cz
Fri Aug 15 16:05:00 GMT 2003
> On Fri, Aug 15, 2003 at 03:44:13PM +0200, Mikulas Patocka wrote:
> > The resulting instruction should have prefixes 66 and 67 and should have
> > 32-bit address.
>
> It certainly looks buggy. I would have expected that gas generate just
> the data prefix and trim the address to 16 bit. Instead we get a 32 bit
It does exactly that, note that objdump --disassemble doesn't know about
.code16, so it displays nonsense --- you have to decode instruction
manually and it seems correct.
However I think it shouldn't do even that. Or maybe add another mode?:
1: .code16 (real mode or 286 protected mode)
2: .code32 without 'd' bit
3: .code32 with 'd' bit
On older versions .code16 used to behave like (2) but now it behaves like (1)
> address inserted into the instruction.
>
> > How can I write 32-bit code that runs in a segment with default operand
> > size 16 (without 'D' bit set)?
>
> .code16
> addr32 movl $0x12345678, 0xabcdef01
Thanks, it works.
Mikulas
More information about the Binutils
mailing list