我正在尝试在汇编程序(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:我不会故意处理此处未找到的情况