3

アセンブラ (XE3) で TList.IndexOf メソッドを書き直そうとしています。これが私のコードです

function TFastList.IndexOfAsm(Item: Pointer): Integer;
{var
  P: PPointer;
begin
  P := Pointer(FList);
  for Result := 0 to FCount - 1 do
  begin
    if P^ = Item then
      Exit;
    Inc(P);
  end;
  Result := -1;}
var
  FCnt, rslt: Integer;
  FData: Pointer;
begin
  FCnt := Count;
  FData := List;
asm
  push edi

  mov ecx, FCnt
  mov edi, FData
  mov eax, Item
  repne scasd

  mov eax, FCnt
  sub eax, ecx
  dec eax
  mov rslt, eax

  pop edi
end;
  Result := rslt;
end;

当然、Count や List などのプロパティを直接使用したいと思います。コンパイラがプライベート フィールド FCount および FList へのアクセスを拒否する理由は理解できますが、対応するプロパティにアクセスするにはどうすればよいですか? Count、Self.Count、および [eax].Count はすべてインライン アセンブラ エラーを返します。

JIC: ここでは意図的に見つからない状況を処理しません

4

1 に答える 1