似乎有一个未记录的常量eof
在 asm 块上下文中。这是使用 Delphi 7 进行测试的。
program TestEof;
{$APPTYPE CONSOLE}
var
example : Integer;
begin
asm
mov example, eof
end;
writeln(example);
readln;
end.
这打印出来14
.
这个常数在哪里eof
它的价值$0E
or 14
来自?
编辑:这是编译结果
...
call @InitExe
// mov example, eof
mov [example], $0000000e
// writeln(example)
mov eax, [$004040a4]
mov edx, [example]
call @Write0Long
call @WriteLn
call @_IOTest
// readln;
...
Eof
实际上是一个函数定义在System unit http://docwiki.embarcadero.com/VCL/en/System.Eof.
在我手头上的Delphi实现中,Delphi 6和XE2,Eof
被实现为内在惯例 http://docwiki.embarcadero.com/RADStudio/XE2/en/Delphi_Intrinsic_Routines这将导致调用以下函数之一(视情况而定):
function _EofFile(var f: TFileRec): Boolean;
function _EofText(var t: TTextRec): Boolean;
我不知道为什么你的汇编代码变成了mov [...],$0000000e
。您在评论中指出System
单位本身利用eof
in asm
代码,例如TextOpen
。 XE2 中的相同代码现在是纯 Pascal 并搜索值$1A
代替$0E
。这很可能是一个实现细节。如果您想了解为什么会这样,那么我认为您需要对中的代码进行逆向工程System
单位,或者看看 Embarcadero 的工程师是否会向您解释实施过程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)