QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2026|回复: 2

求救__memcopy()?

[复制链接]
发表于 2006-1-5 14:38:02 | 显示全部楼层 |阅读模式
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");

}
我看不懂,希望帮我,谢谢!
发表于 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");

}
回复

使用道具 举报

 楼主| 发表于 2006-1-12 08:25:26 | 显示全部楼层
多谢,gotop167的回复。谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-5-4 17:31 , Processed in 0.070393 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表