首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi 帮忙改写一个该函数成Unicode版本的,功能一样。解决办法

2012-03-15 
delphi 帮忙改写一个该函数成Unicode版本的,功能一样。function BMPos(const aSource, aFind: Pointer con

delphi 帮忙改写一个该函数成Unicode版本的,功能一样。
function BMPos(const aSource, aFind: Pointer; const aSourceLen, aFindLen: Integer; var JumpTable: TBMJumpTable): Pointer;
var
  LastPos: Pointer;
begin
  LastPos := Pointer(Integer(aSource) + aSourceLen - 1);
  asm
  push ESI
  push EDI
  push EBX

  mov EAX, aFindLen
  mov ESI, aSource
  lea ESI, ESI + EAX - 1
  std
  mov EBX, JumpTable

@@comparetext:
  cmp ESI, LastPos
  jg @@NotFound
  mov EAX, aFindLen
  mov EDI, aFind
  mov ECX, EAX
  push ESI //Remember where we are
  lea EDI, EDI + EAX - 1
  xor EAX, EAX
@@CompareNext:
  mov al, [ESI]
  cmp al, [EDI]
  jne @@LookAhead
  lea ESI, ESI - 1
  lea EDI, EDI - 1
  dec ECX
  jz @@Found
  jmp @@CompareNext

@@LookAhead:
  //Look up the char in our Jump Table
  pop ESI
  mov al, [ESI]
  mov EAX, [EBX + EAX * 4]
  lea ESI, ESI + EAX
  jmp @@CompareText

@@NotFound:
  mov Result, 0
  jmp @@TheEnd
@@Found:
  pop EDI //We are just popping, we don't need the value
  inc ESI
  mov Result, ESI
@@TheEnd:
  cld
  pop EBX
  pop EDI
  pop ESI
  end;
end;

[解决办法]
这个太难了吧 坐等大牛出现
[解决办法]
不懂汇编啊,汇编中@@是什么意思?

热点排行