Sembra esserci una costante non documentata eof
in contesto di blocco asm. Questo è stato testato utilizzando Delphi 7.Costante assemblatore Delphi 'eof'
program TestEof;
{$APPTYPE CONSOLE}
var
example : Integer;
begin
asm
mov example, eof
end;
writeln(example);
readln;
end.
Questo stampa 14
.
dove che costante eof
e il suo valore valore $0E
o 14
viene?
EDIT: questo è il risultato della compilazione
...
call @InitExe
// mov example, eof
mov [example], $0000000e
// writeln(example)
mov eax, [$004040a4]
mov edx, [example]
call @Write0Long
call @WriteLn
call @_IOTest
// readln;
...
Questo è effettivamente utilizzato anche in 'system.pas'. Vedi la funzione 'TextOpen'. Dopo '// if (f.Buffer [i] == eof)'. Riga 'CMP byte ptr [ESI] .TTextRec.Buffer [EAX], eof'. – Egon
In senso stretto, è un built-in. Il builtin chiama l'helper rtl che sono le funzioni specificate dall'utente, ma può anche generare codice e chiamare altre funzioni (ad es. Iotest). L'EOF potrebbe essere un numero di sequenza interno per il build-in, per semplificare più built-in che sono simili (ad esempio tutti i builder IOCheck/IOTest) ma senza l'origine del compilatore che è congettura. –
E in XE2 il codice equivalente cerca '$ 1A'. Questo è chiaramente il dettaglio di implementazione in System.pas. Che problema stai cercando di risolvere o è solo per curiosità. –