【发布时间】:2016-06-05 20:10:45
【问题描述】:
我有两个动态大小的二维数组(我猜这是正确的措辞)。我将第一个的内容复制到另一个使用:
dest:=copy(src,0,4*x*y);
// src,dest:array of array of longint; x,y:longint;
// setlength(both arrays,x,y); //x and y are max 15 bit positive!
它有效。但是我无法在 asm.xml 中重现它。我尝试了以下变体无济于事...有人可以启发我...
MOV ESI,src; MOV EDI,dest; MOV EBX,y; MOV EAX,x; MUL EBX;
PUSH DS; POP ES; MOV ECX,EAX; CLD; REP MOVSD;
还尝试了 LEA(没想到会起作用,因为它应该获取指针地址而不是数组地址),没有工作,并尝试了:
p1:=@src[0,0]; p2:=@dest[0,0]; //being no-type pointers
MOV ESI,p1; MOV EDI,p2... (the same asm)
请提示?顺便说一句,它是 delphi 6。错误当然是访问冲突。
【问题讨论】:
-
你为什么要这样做? asm 版本不太可能明显更快。
-
@500-InternalServerError 为什么人们需要用 Why? 来回答问题 :) 如果这是 XY 问题 可能是合理的,但我不认为是。 OP 可能只是好奇,也可能想挑战自己。
-
@MargaretBloom:这就是重点:我们不知道 OP 这样做的动机。知道这一点将使我们能够写出有针对性的答案。 - 我看到你已经回复了,这很好。
-
查看
system.move的 fastcode 源代码,请参阅:fastcode.sourceforge.net 和/或获取 fastmove 的源代码:fastcode.sourceforge.net/FastcodeFileDownloads/FastMove303.zip -
@MargaretBloom “为什么”的问题是有效的。当他们的动机受到质疑时,提问者经常会感到不安。但也经常会发现,这种动机背后存在误解。也许这里不是这样,但是当我们问“为什么”问题时,通常是为了尽可能地提供帮助。
标签: delphi assembly x86 inline-assembly memcpy