有谁可以告诉我这两个变量int rsrc, rdst;
的作用是什么?或者通过声明向我解释以下代码?
static inline char * asm_strcpy(char *dst, char *src) {
int rsrc, rdst;
__asm__ __volatile__(
"1: \tlodsb\n\t;"
"stosb\n\t;"
"testb %%al,%%al\n\t;"
"jne 1b;"
: "=&S" (rsrc), "=&D" (rdst)
: "0" (src),"1" (dst)
);
return dst;
}
答案 0 :(得分:3)
rsrc
和rdst
用作占位符变量,稍后指示编译器使用SI
和DI
在寄存器中优化它们。 src
和dst
也是如此,但它们被用作汇编代码的输入,而rsrc
和rdst
则是其丢弃的输出。
汇编代码非常简单:
1:
lodsb ; loads byte at *SI to register AL, increments SI
stosb ; stores byte at *DI from register AL, increments DI
testb AL,AL ; sets flags based on value in AL
jne 1: ; repeat if AL is non zero
要使所有这些操作正确,方向标志应清晰;没有经验法则,因为它可能取决于调用约定,或者可以在整个程序中自由修改
如果上面的代码应该与DF无关,那么下面应该包装它:
PUSHF
CLD
...
POPF