Asm bloğu bağlamında belgesiz bir sabit eof
görünüyor. Bu Bu 14
yazdırır Delphi 7.Delphi assembler sabiti 'eof'
program TestEof;
{$APPTYPE CONSOLE}
var
example : Integer;
begin
asm
mov example, eof
end;
writeln(example);
readln;
end.
kullanılarak test edilmiştir.
Bu sabit eof
ve değeri $0E
veya 14
değeri nereden geliyor?
DÜZENLEME: Bu
...
call @InitExe
// mov example, eof
mov [example], $0000000e
// writeln(example)
mov eax, [$004040a4]
mov edx, [example]
call @Write0Long
call @WriteLn
call @_IOTest
// readln;
...
Bu aslında 'system.pas' içinde de kullanılır. 'TextOpen' işlevine bakın. // if (f.Buffer [i] == eof) 'dan sonra. Satır CMP bayt ptr [ESI] .TextRec.Buffer [EAX], eof'. – Egon
Kesinlikle, bu bir yerleşiktir. Yerleşik, belirttiğiniz işlevler olan rtl yardımcısını çağırır, ancak kod üretebilir ve başka işlevleri de (örn., Iotest) çağırabilir. EOF, benzer yapıdaki (örneğin, tüm IOCheck/IOTest yerleşkeleri), ancak tahmin edilen derleyici kaynağı olmaksızın birden çok yerleşik parçayı düzene koymaya yardımcı olmak amacıyla, yerleşik için bazı dahili sıra numarası olabilir. –
Ve XE2'de, eşdeğer kod "$ 1A" için görünüyor. Bu, System.pas'ta açıkça uygulama detayıdır. Hangi sorunu çözmeye çalışıyorsunuz yoksa bu sadece meraktan yoksun. –