那位大哥能帮我把CompareMem改成C++的

大脚板 2003-09-12 03:52:32
函数如下
function CompareMem(P1, P2: Pointer; Length: Integer): Boolean; assembler;
asm
PUSH ESI
PUSH EDI
MOV ESI,P1
MOV EDI,P2
MOV EDX,ECX
XOR EAX,EAX
AND EDX,3
SHR ECX,1
SHR ECX,1
REPE CMPSD
JNE @@2
MOV ECX,EDX
REPE CMPSB
JNE @@2
INC EAX
@@2: POP EDI
POP ESI
end;

对汇编不懂,不知道是在哪里引用Length变量的
不甚感激
...全文
42 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangmanyuan 2003-09-12
  • 打赏
  • 举报
回复
up
zjqyb 2003-09-12
  • 打赏
  • 举报
回复
默认情况下,delphi使用“register”方式,若参数在3个已内,

将分别使用eax、edx和ecx,超过3个参数部分将使用堆栈。返回参数的

存放视长度而定,例如8位用al返回,16位用ax,32位用eax,64位用用两个

32位寄存器edx:eax,其中eax是低位
CloneCenter 2003-09-12
  • 打赏
  • 举报
回复
楼上的:

那为什么是 ECX 呢?而不是其它寄存器,有没有一些资料?
zjqyb 2003-09-12
  • 打赏
  • 举报
回复
因为delphi 的参数缺省是寄存器调用

Length=ECX
zjqyb 2003-09-12
  • 打赏
  • 举报
回复
直接用memcmp

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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