在Turbo Pascal中,带有空项目的编译COM文件大于10 KiB



我对旧Pascal版本的二进制文件大小有一个问题。

我们需要非常小的简单程序。我们想在MS-DOS中使用Turbo Pascal 2(更高是相同的问题)来编译COM文件。但大小总是10 KiB或更大,即使是一个空项目,如:

begin
end.

编译后的文件大小为10052字节。我不明白为什么。我测试了编译器命令,更改了堆栈/堆,没有结果。

编译输出:

Compiling --> c:emtpy.com
3 lines
code: 0002 paragraphs (32 bytes), 0D7B paragraphs free
data: 0000 paragraphs (0 bytes), 0FE7 paragraphs free
stack/heap: 0400 paragraphs (16384 bytes) (minimum)
4000 paragraphs (262144 bytes) (maximum)

是否有可能得到一个较小的COM文件,是否有可能将Pascal代码自动转换为ASM代码?

任何版本的Turbo Pascal 3.02都将生成一个包含整个运行时库的可执行文件。正如您所发现的,目标操作系统上的TP2的大小约为10,050字节。

我们需要非常小的简单程序。

…那么Turbo Pascal 2不是一个很好的启动选择。如果你想坚持使用Pascal并瞄准MS-DOS,最好尝试4以上的任何版本。或者切换到C语言或汇编语言,这将能够产生更小的可执行文件,代价是更难以开发。

[…可以将Pascal代码自动转换为ASM代码吗?

它可以使用Turbo Pascal完成,但它不实用(基本上你需要一个反汇编器;IDA就是这样一种工具,现在正在使用;你需要的版本不是免费的。)此外,从已经编译的应用程序中删除一些字节也不会有什么好处:直接用汇编语言开始会好得多。

无论如何,实现它的最佳过程是放弃Turbo Pascal并转到Free Pascal,该编译器生成.s文件,这些文件是用汇编语言编写的(尽管可能与您使用的语法不同)。有一个针对16位i8086处理器的子项目,它似乎是最新的(我从未尝试过)

你在评论中提到你真的需要。com格式(Turbo Pascal 4-7不直接支持)。问题是关于内存模型。com程序原生地使用所谓的微小的模型(16位代码和数据段重叠在同一位置),但它可以在某种程度上逃避应用程序(不是TSR),它可以抓取所有可用的内存;用于MS-DOS的TP 1-3使用了compact模型的一种变体(数据指针为32位"far"但代码指针是16位的"near",上限为64ki字节的代码);TP 4-7使用的是large模型,其中每个单元都有一个单独的代码段。可以重写运行时库以仅使用一个代码段,然后重新链接tp生成的可执行文件以将FAR调用转换为NEAR调用(这很容易,因为所有信息都在. exe的重定位表中)。然而,直接使用Free Pascal,你将很快回家,它支持原生的小内存模型,并可以生成。com可执行文件;同时与Turbo Pascal高度兼容。

取决于您的编译器版本和开关。10kb是不可能的。我写了我自己的Turbo Pascal编译器克隆,因为我仍然为公司做很多DOS遗留项目。

Program Empty;
Begin
End.

我的源代码基本上是一样的,除了我的编译器需要第1行,所以我知道输出类型。

TPC v7.0.1b: {mine}
03/19/2023  10:33 PM             1,504 EMPTY.EXE
03/19/2023  10:33 PM                29 empty.pas
4 lines, 0.00 seconds, 1360 bytes code, 668 bytes data.
TPC v7.0: {Borland}
03/19/2023  10:36 PM             1,632 EMPTY.EXE
03/19/2023  10:33 PM                29 empty.pas
4 lines, 1472 bytes code, 668 bytes data.
BPC v7.0 {Borland}
03/19/2023  10:37 PM             1,632 EMPTY.EXE
03/19/2023  10:33 PM                29 empty.pas
4 lines, 1472 bytes code, 668 bytes data.

我的编译器和Borland的编译器之间的唯一区别是我做了更好的优化(自TP存在以来30多年来学习的技术)。据我所知,自从Turbo Pascal v3.0存在以来,你不能用它生成。com。

相关内容

最新更新