【发布时间】:2014-08-17 21:15:24
【问题描述】:
我正在尝试在汇编程序 (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:我不会故意处理此处未找到的情况
【问题讨论】:
-
你不能从 asm 访问属性。当您放弃编译器时,您就放弃了该特权。
标签: delphi assembly properties basm