Christian Schüler <gcchelp.5.adept@xxxxxxx> writes: > I'd like to make an asm statement emit offset-register addressing like this: > > movl 0x80(eax), ebx > > where eax contains the pointer to a class (this) and 0x80 is the offset to a > member variable. > I get an error when assigning the member variable to a memory reference. > > asm( "mov %[source], %[dest]" > : [dest] "=r" (...) > : [souce] "m" (this->member) ); // ERROR "memory input is not directly > addressable" Try using "p" (&this->member) That might work. > Also, decomposing by hand always put a "$" in front of the offset rendering it > unusable, eg. > > asm( "mov %[offset](%[base]), %[dest]" > : [dest] "=r" (...) > : [base] "r" (this), [offset] "p" (offsetof(member)) ); > > generates > > movl $0x80(eax), ebx // ERROR "Junk..." > > where assembler complains about the dollar sign. For this sort of approach you want "c", not "p". Ian