Dường như có một hằng số không có giấy tờ eof
trong ngữ cảnh khối asm. Điều này đã được thử nghiệm bằng Delphi 7.hằng số bộ ghép Delphi 'eof'
program TestEof;
{$APPTYPE CONSOLE}
var
example : Integer;
begin
asm
mov example, eof
end;
writeln(example);
readln;
end.
Điều này in ra 14
.
Hằng số đó ở đâu eof
và giá trị giá trị của nó là $0E
hoặc 14
đến từ đâu?
EDIT: đây là kết quả tổng hợp
...
call @InitExe
// mov example, eof
mov [example], $0000000e
// writeln(example)
mov eax, [$004040a4]
mov edx, [example]
call @Write0Long
call @WriteLn
call @_IOTest
// readln;
...
Điều này cũng thực sự được sử dụng trong 'system.pas'. Xem chức năng 'TextOpen'. Sau '// if (f.Buffer [i] == eof)'. Dòng 'CMP byte ptr [ESI] .TTextRec.Buffer [EAX], eof'. – Egon
Nói đúng ra, nó được tích hợp sẵn. Trình dựng sẵn gọi trình trợ giúp rtl là các hàm mà bạn chỉ định, nhưng cũng có thể tạo mã và gọi các hàm khác (ví dụ: iotest). EOF có thể là một số thứ tự nội bộ cho bản dựng sẵn, để giúp hợp lý hóa nhiều bản dựng sẵn tương tự (ví dụ: tất cả các nội trang IOCheck/IOTest) nhưng không có nguồn trình biên dịch phỏng đoán. –
Và trong XE2 mã tương đương tìm kiếm '$ 1A'. Đây là chi tiết thực hiện rõ ràng trong System.pas. Bạn đang cố gắng giải quyết vấn đề gì hoặc điều này chỉ là do tò mò. –