汇编有可能比系统的CopyMemory快吗?

xiehuanxie 2018-04-17 10:04:01
我找了一段代码,试下来比系统自带的CopyMemory还要慢,有办法更快吗?

[DllImport("kernel32.dll", EntryPoint = "CopyMemory", SetLastError = false)]
public static extern void CopyMemory(IntPtr dest, IntPtr src, uint count);

X64环境


CopyImplement proc
push rbp
sub rsp, 30h
lea rbp, [rsp+30h]

mov r10, rdx

mov rax, r8
mov rdx, r8
shr rax, 8
shl rax, 8
sub rdx, rax
shr rax, 8

test rax, rax
jz copy_finish

loop_copy:
prefetchnta 256[r10]
prefetchnta 288[r10]
prefetchnta 320[r10]
prefetchnta 352[r10]
prefetchnta 384[r10]
prefetchnta 416[r10]
prefetchnta 448[r10]
prefetchnta 480[r10]

MOVDQA xmm0, [r10];
MOVDQA xmm1, 16[r10];
MOVDQA xmm2, 32[r10];
MOVDQA xmm3, 48[r10];
MOVDQA xmm4, 64[r10];
MOVDQA xmm5, 80[r10];
MOVDQA xmm6, 96[r10];
MOVDQA xmm7, 112[r10];
MOVDQA xmm8, 128[r10];
MOVDQA xmm9, 144[r10];
MOVDQA xmm10, 160[r10];
MOVDQA xmm11, 176[r10];
MOVDQA xmm12, 192[r10];
MOVDQA xmm13, 208[r10];
MOVDQA xmm14, 224[r10];
MOVDQA xmm15, 240[r10];

MOVDQA [RCX], xmm0;
MOVDQA 16[RCX], xmm1;
MOVDQA 32[RCX], xmm2;
MOVDQA 48[RCX], xmm3;
MOVDQA 64[RCX], xmm4;
MOVDQA 80[RCX], xmm5;
MOVDQA 96[RCX], xmm6;
MOVDQA 112[RCX], xmm7;
MOVDQA 128[RCX], xmm8;
MOVDQA 144[RCX], xmm9;
MOVDQA 160[RCX], xmm10;
MOVDQA 176[RCX], xmm11;
MOVDQA 192[RCX], xmm12;
MOVDQA 208[RCX], xmm13;
MOVDQA 224[RCX], xmm14;
MOVDQA 240[RCX], xmm15;

add RCX, 256;
add r10, 256;
dec rax;
jnz loop_copy;

copy_finish:
test rdx, rdx
jz copyByteFinish

loop_copyByte:
mov r11b, [r10]
mov [rcx], r11b

inc r10
inc rcx
dec rdx
jnz loop_copyByte

copyByteFinish:
lea rsp, [rbp]
pop rbp
ret
CopyImplement endp
...全文
968 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
大熊猫侯佩 2018-04-30
  • 打赏
  • 举报
回复
你的代码数量级不够
zara 2018-04-17
  • 打赏
  • 举报
回复
你这代码,是通过寄存器中转的?这肯定不行吧,哪有直接内存挪移快。
可以看看 CopyMemory() 代码啊,好像就是做了下对齐,然后就是 rep movsd 了,最后是剩余的字节的 rep movsb ,都是内存间直接拷贝的。
  • 打赏
  • 举报
回复
这代码应该是用于老架构的,Pentium4、PentiumD之类的,虽然改成了64位代码,效率并不佳,而且只对于中等规模复制,几MB这种级别,比较有效。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧