求救__memcopy()?
static inline void * __memcopy(void * to, const void * from, size_t n) {int d0, d1, d2;
__asm__ __volatile__ (
"rep : movsl\n\t"
"testb $2, %b4\n\t" ;这一句是不是看%4的bit2是不是为1
"je 1f\n\t" ;je是相等则转移——》我觉得应该是jne?
"movsw\n" ;复制半字?;
"1:\ttestb $1, %b4\n\t"
"je 2f\n\t"
"movsb\n"
"2:"
: "=&c"(d0), "&D"(d1), "=&S(d2)"
: "0"(n/4), "q"(n), "1"((long)to), "2"((long)from)
: "memory");
}
我看不懂,希望帮我,谢谢! static inline void * __memcopy(void * to, const void * from, size_t n) {
int d0, d1, d2;
__asm__ __volatile__ (
"rep : movsl\n\t" //为了加快速度,每4个字节为单位复制(所以,便有了"0"(n/4),也就是ecx=n/4,如果n=15的话,则ecx=3,还余3,同时也请注意最多也就剩余3个字节)
"testb $2, %b4\n\t" ; //到这里的话,说明上面的前12个字节已经全部复制完成,所以要比较剩下的
//是否还有要拷贝字节。先与2比较,
"je 1f\n\t" ; //无则跳转(这里请你看一下,testb指令)
"movsw\n" ; //否则复制一个字(2个字节)
"1:\ttestb $1, %b4\n\t" //在看是否还剩1个字节
"je 2f\n\t" //无则跳转
"movsb\n" //否则复制一个字节
"2:"
: "=&c"(d0), "&D"(d1), "=&S(d2)"
: "0"(n/4), "q"(n), "1"((long)to), "2"((long)from)
: "memory");
} 多谢,gotop167的回复。谢谢
页:
[1]