我試圖把彙編代碼放到我的C函數中。 該功能的目的是存儲在SRC地址值複製到DST地址:彙編代碼C
void copy(int *dst, int *src);
我的實際問題的代碼:
void copy(int *dst, int *src)
{
asm("mov %1, %2"
: /* no output */
: "i" (dst),
"i" (src)
: ""
);
}
給我的錯誤:
test.c: In function ‘copy’:
test.c:29: error: unknown register name ‘’ in ‘asm’
test.c:29: warning: asm operand 0 probably doesn’t match constraints
test.c:29: warning: asm operand 1 probably doesn’t match constraints
第29行是這一行:
asm("mov %1, %2"
編輯:
asm("mov %0, %1"
: "=m" (dst)
: "m" (dst),
"m" (src)
: ""
);
現在給我:
error: unknown register name ‘’ in ‘asm’
我不知道做什麼用的最後一節做。
EDIT2
我讀過,我不能MOV內存 - >內存,我需要使用的寄存器。而且我還需要使用AT & T語法,以便像「mov src,dest」一樣。下面的代碼編譯,但不幸的是,由dst指向的地址中的值是0,而不是我放入由src指向的地址中的值。
asm("movl %1, %%eax \n\t"
"movl %%eax, %0 \n\t"
: "=m" (dst)
: "m" (dst),
"m" (src)
);
EDIT3
我就是這麼做的(改變參數),它現在的作品:
void copy(int *dst, int *src, int n)
{
int a = *src;
int b = *dst;
asm("movl %1, %%eax\n"
"movl %%eax, %0\n"
: "=m" (b)
: "m" (a)
);
*src = a;
*dst = b;
}
,你有一個輸入和一個輸出。而且他們都不是我的中間值。一個''m''emory對象應該適用於兩者。 – glglgl
這是什麼架構? –
你使用什麼編譯器? – geoffspear