请教:strcpy的汇编实现
2.4内核下,include/asm-i386/string.h中strcpy实现的源码如下:
static inline char * strcpy(char * dest,const char *src) { int d0, d1, d2; __asm__ __volatile__( "1:\tlodsb\n\t" "stosb\n\t" "testb %%al,%%al\n\t" "jne 1b" : "=&S" (d0), "=&D" (d1), "=&a" (d2) :"0" (src),"1" (dest) : "memory"); return dest; } |
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
1.test指令和and指令一样,除了不改变目的操作数
2.两种写法而已
多谢。
那另外声明的d0,d1,d2是做什么用的呢?
"=&D" ,"=&S"的意思你可以去info gcc->C Extensions->Extended Asm中查
根据资料上说明,凡是与输出部中说明的操作数相结合的寄存器或者操作数本身,在执行嵌入的汇编代码以后均不保留执行之前的内容,这就给gcc提供啦调度使用这些寄存器的依据
学习了!