加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi汇编器常数’eof’

发布时间:2020-12-15 04:28:00 所属栏目:大数据 来源:网络整理
导读:在ASM块上下文中似乎有一个无证的常数.这是使用Delphi 7进行测试. program TestEof;{$APPTYPE CONSOLE}var example : Integer;begin asm mov example,eof end; writeln(example); readln;end. 这打印出14. 那个常数eof和它的价值是$0E还是14来自哪里? 编辑
在ASM块上下文中似乎有一个无证的常数.这是使用Delphi 7进行测试.
program TestEof;
{$APPTYPE CONSOLE}
var
  example : Integer;
begin
  asm
    mov example,eof
  end;
  writeln(example);
  readln;
end.

这打印出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;
...

解决方法

Eof其实是 function defined in the System unit.

在Delphi 6中,Delphi 6和XE2的实现中,Eof被实现为intrinsic routine,可以调用以下功能之一:

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读