1
4

2 回答 2

2

You have an empty entry in your clobber section. You don't need that.

Try this:

asm("mov %0, %1"
    : "=m" (dst)
    : "m" (dst),
      "m" (src)
    /* no clobbers */
    );

That code is precisely equivalent to this:

*dst = *src

so I presume this is just small example?

The code compiles, but gives:

t.c: Assembler messages:
t.c:2: Error: too many memory references for `mov'

So I think your assembler instruction needs work, but the compiler syntax is OK.

于 2013-10-30T12:12:23.120 回答
0

You can use:

void copy(int *dst, int *src)
{
  __asm__ __volatile__(
    "movl (%0), %%eax\n" 
    "movl %%eax, (%1)\n"
    :
    : "r"(src), "r"(dst)
    : "%eax"
  );
}

which is equivalent to:

mov    (%edx), %eax   ; eax = *src
mov    %eax, (%ecx)   ; *dst = eax
于 2013-10-30T16:34:52.403 回答