Kann mir jemand sagen, was diese beiden Variablen funktionieren int rsrc, rdst;
? ODER erkläre ich den folgenden Code für mich Statement für Statement?Ein strccy gcc Inline Assembly Code
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;
}
'strcpy' Kopiert Zeichen von einer Zeichenfolge in eine andere. src = Quelle, dst = Ziel, r = register (?) – Palec
'=' und '&' sind [Constraint Modifier] (http://gcc.gnu.org/onlinedocs/gcc/Modifiers.html#Modifiers). 'S' ist' si' Register und 'D' ist' di' Register auf Intel 386. Diese beiden sind [maschinenabhängige Einschränkungen] (http://gcc.gnu.org/onlinedocs/gcc/Machine-Constraints.html) # Maschinen-Constraints). – Palec
BTW - die "&" Einschränkungen für 'early-clobber outputs' machen hier nichts, da Sie diese mit den Eingängen "0", "1" aliasiert haben. Sie könnten die Eingaben weglassen und die Ausgaben mit "+ S" (src), "+ D" (dst) ersetzen. "% eax" muss der Clobber-Liste hinzugefügt werden, und es wäre technisch korrekter, der Clobber-Liste auch "Speicher" hinzuzufügen. –