【发布时间】:2017-09-25 18:11:54
【问题描述】:
我是一名高中生,今年开始学习汇编。
我目前正在制作 Pacman 克隆作为我的最终项目。
我遇到的唯一问题是我的代码很大,而 *.exe 文件几乎是 64KB。
所以我的问题是,如果我转向模型介质,我需要做什么才能使我的代码与额外的代码段一起工作?
我认为我需要使用Icall 而不是call,并更新程序,因为现在每次我调用它们时,segment 和 ip 都会被推送,但是我还需要做些什么吗?
【问题讨论】:
-
所需的具体工作量取决于选择的汇编程序(我假设您正在为 DOS 编程)。正如您所指出的,呼叫最终需要远距离(包括
retf)。我想不出其他任何事情。如果可执行文件的大小超过 640KiB(或更小),您可能需要使用 overlays。 -
@MargaretBloom 所以我需要做的就是更新程序(调用、rets、堆栈中的参数地址等),就这样吗?只有当可执行文件大于 640KB 时才需要使用叠加层?
-
自从我上次编写多个代码段以来已经有很长时间了,最好等待更知情的人:) 但我很想回答:是的
-
您不需要任何接近 64K 的代码就可以在汇编中编写 Pacman 克隆。由于缓冲区、地图和位图等数据,您的 .EXE 的大小可能接近 64K。确保您使用的是小型内存模型,具有单独的代码和数据段,并让您的链接器生成链接映射以查看每个段的大小。
-
我同意罗斯的观点。您非常不太可能需要超过 64K 字节的代码。您可能可以摆脱小型模型,其中有一个最大 64K 字节的代码段和一个最大 64K 字节的数据/堆栈段。如果这还不够,那么最有可能的选择是紧凑模型,它有 1 个代码段和多个数据段。我怀疑您是否需要具有多个代码段的中型模型。如果您有超过 64K 字节的汇编代码,则说明您过度使用宏,导致内联代码臃肿。将它们更改为过程。
标签: assembly executable x86-16