lin1010 发表于 2006-1-5 14:38:02

求救__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");

}
我看不懂,希望帮我,谢谢!

gotop167 发表于 2006-1-9 15:17:40

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");

}

lin1010 发表于 2006-1-12 08:25:26

多谢,gotop167的回复。谢谢
页: [1]
查看完整版本: 求救__memcopy()?