This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [rfc] 16 bit real-mode for the i386


On Aug 29,  5:36pm, Daniel Jacobowitz wrote:

> Now, my i386 knowledge is a bit rusty.  But:
> 
> > +static CORE_ADDR
> > +i386_read_pc (ptid_t ptid)
> > +{
> > +  CORE_ADDR pc = read_register_pid (PC_REGNUM, ptid);
> > +  if (i386_real_mode_p)
> > +    {
> > +      CORE_ADDR cs = read_register_pid (CS_REGNUM, ptid);
> > +      pc = pc + (cs << 4);
> > +    }
> > +  return pc;
> > +}
> > +
> > +static void
> > +i386_write_pc (CORE_ADDR pc, ptid_t ptid)
> > +{
> > +  if (i386_real_mode_p)
> > +    {
> > +      CORE_ADDR cs = read_register_pid (CS_REGNUM, ptid);
> > +      pc = pc - (cs << 4);
> > +    }
> > +  write_register_pid (PC_REGNUM, pc, ptid);
> > +}
> > +
> 
> Left shift of _four_?  Surely the PC is more than four bits.

I think that's right.  My (hazy) recollection from my days of programming
x86 before there was an 80386 is that an address was formed by shifting
the segment registers left by four bits and adding some other sixteen bit
register to it.

Kevin


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]