Parece que hay una constante no documentada eof
en contexto de bloque asm. Esto se probó usando Delphi 7.Constante ensambladora Delphi 'eof'
program TestEof;
{$APPTYPE CONSOLE}
var
example : Integer;
begin
asm
mov example, eof
end;
writeln(example);
readln;
end.
Esto imprime 14
.
¿De dónde viene esa constante eof
y su valor de valor $0E
o 14
?
EDIT: este es el resultado de la compilación
...
call @InitExe
// mov example, eof
mov [example], $0000000e
// writeln(example)
mov eax, [$004040a4]
mov edx, [example]
call @Write0Long
call @WriteLn
call @_IOTest
// readln;
...
Esto también se usa en 'system.pas'. Ver la función 'TextOpen'. Después de '// if (f.Buffer [i] == eof)'. Línea 'CMP byte ptr [ESI] .TTextRec.Buffer [EAX], eof'. – Egon
Estrictamente hablando, es un built-in. El builtin llama al rtl helper, que son las funciones que usted especifica, pero también puede generar código y llamar a otras funciones (por ejemplo, iotest). El EOF podría ser un número de secuencia interno para el built-in, para ayudar a simplificar múltiples integradas que son similares (por ejemplo, todos los builtins IOCheck/IOTest) pero sin fuente de compilación que sea conjetural. –
Y en XE2, el código equivalente busca '$ 1A'. Esto es claramente un detalle de implementación en System.pas. ¿Qué problema estás tratando de resolver o es solo por curiosidad? –