Delphi汇编程序常量'eof'

Ego*_*gon 10 delphi assembly delphi-7

eof在asm块上下文中似乎存在未记录的常量.这是使用Delphi 7测试的.

program TestEof;
{$APPTYPE CONSOLE}
var
  example : Integer;
begin
  asm
    mov example, eof
  end;
  writeln(example);
  readln;
end.
Run Code Online (Sandbox Code Playgroud)

打印出来14.

这是不变的eof,它的价值$0E还是14来自哪里?


编辑:这是编译结果

...
call @InitExe
// mov example, eof
mov [example], $0000000e
// writeln(example)
mov eax, [$004040a4]
mov edx, [example]
call @Write0Long
call @WriteLn
call @_IOTest
// readln;
...
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 5

Eof实际上是单位中定义System函数.

在我手头的Delphi实现中,Delphi 6和XE2 Eof被实现为一个内部例程,可以根据需要调用以下函数之一:

function _EofFile(var f: TFileRec): Boolean;
function _EofText(var t: TTextRec): Boolean;
Run Code Online (Sandbox Code Playgroud)

我不知道为什么你的汇编程序代码变成了mov [...],$0000000e.你在评论中指出System单位本身eofasm代码中使用,例如在TextOpen.XE2中的相同代码现在是纯粹的Pascal并且搜索值$1A而不是$0E.这似乎是一个实现细节.如果您想了解为什么会这样,那么我认为您需要对设备中的代码进行逆向工程System,或者看看Embarcadero的工程师是否会向您解释实施.