Jia*_*hen 5 c assembly gcc inline-assembly
谁能告诉我这两个变量的作用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;
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
为了使所有这些都能正确运行,方向标志应该清晰;没有经验法则,因为它可能取决于调用约定,或者可以在整个程序中自由修改
如果上述代码应与 DF 无关,则应将其包装如下:
PUSHF
CLD
...
POPF
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1076 次 |
| 最近记录: |