Mail Archives: djgpp/1999/06/18/16:40:19
> > > > Okay.. I'm modifying a sprite compiler for use in djgpp, and I
dunno
> > how to do the following.
> > > >
> > > > I currently have
> > > > fprintf(outfile," \"movb 0x%02X, 0x%X(%%%%edi,,)\\n\\t\" \n",
byte1,
> > > > offset);
> > > >
> > > > that's in my C code. (extended asm, and the four %'s become two in
the
> > > > file that's written to.)That resoves to
> > > > "movb 0x12, 0x11D3(%%edi,,) \n\t"
> > > >
> > > > The idea and the problem is the
> > > > immed32(basepointer,indexpointer,indexscale)
> > > > format.
[more stuff]
> > > The effective address for `disp(base,index,scale)' is
> > >
> > > disp + base + (index * scale)
> > >
> > > Where disp is a constant, base and index are registers, and scale is
the
> > > number 1, 2, 4 or (I think) 8. (You don't need the $ delimiter in a
> > > memory operand.)
> > >
> > > Any of these can be omitted, and you need not include the delimiters
for
> > > omitted ones if they are at the end. So:
> > >
> > > disp
> > > (base)
> > > disp(base)
> > > disp(base,index) # scale assumed to be 1
> > >
> > >
> > AAAAAAAAAAAAARGH!!!! I just realized a big mistake. The $.
> > The bloody $. Okay. "movb $0x1e, $0x604c(%%edi) \n\t"
> > Still no go. Same problem. As with your second solution,
> > and your third. You want the source code with this?
>
> No $ in the second one.
>
> movb $0x1e, 0x604c(%%edi)
>
> The $ is only used for an immediate operand which stands alone.
Yup. Thanx. I was getting really frustrated... It makes sense, but
it's one of those things a newbie doesn't dream up, and the people
that write the faqs don't always think of...
-Bart
- Raw text -