gpt4 book ai didi

Delphi汇编器常量 'eof'

转载 作者:行者123 更新时间:2023-12-03 14:42:13 30 4
gpt4 key购买 nike

asm block 上下文中似乎有一个未记录的常量 eof。这是使用 Delphi 7 进行测试的。

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

这会打印出14

常量eof及其值$0E14来自哪里?

<小时/>

编辑:这是编译结果

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

最佳答案

Eof 实际上是 function defined in the System unit .

在我手头的 Delphi 实现中,Delphi 6 和 XE2,Eof 被实现为 intrinsic routine这将导致调用以下函数之一(如果适用):

function _EofFile(var f: TFileRec): Boolean;
function _EofText(var t: TTextRec): Boolean;

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

关于Delphi汇编器常量 'eof',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8702908/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com