Assembly 如何存储未知数量的数字

Assembly 如何存储未知数量的数字,assembly,68000,Assembly,68000,我要做的是从一个只有正整数的文件中读取,然后对整数进行排序并输出它们 问题是,我不知道我试图读取的文件将有多少行(每行有一个数字) 即使我不知道会有多少个数字,是否有办法将数字存储在地址/数据寄存器中 编辑:再解释一下。数据文件可能只有不到14个输入,问题是,如果您正在读取文件,操作系统将为您提供“文件结束检查”,我将如何放置。如果你逐行阅读,很容易数到行数;EndOfFile检查为真时,行计数器显示的行总数 要存储这组数字,您可能需要一个足够大的连续存储块。您可以预先确定最大大小,只需静态声明

我要做的是从一个只有正整数的文件中读取,然后对整数进行排序并输出它们

问题是,我不知道我试图读取的文件将有多少行(每行有一个数字)

即使我不知道会有多少个数字,是否有办法将数字存储在地址/数据寄存器中


编辑:再解释一下。数据文件可能只有不到14个输入,问题是,如果您正在读取文件,操作系统将为您提供“文件结束检查”,我将如何放置。如果你逐行阅读,很容易数到行数;EndOfFile检查为真时,行计数器显示的行总数

要存储这组数字,您可能需要一个足够大的连续存储块。您可以预先确定最大大小,只需静态声明足够大的缓冲区

另一种方法是动态分配内存(请参阅对Malloc的调用或操作系统提供的类似功能),以容纳比您期望的更大的内存量,并将值填充到该空间中,直到其满为止。如果文件还有更多内容,请分配一个更大的块,复制从旧块收集到的值,释放旧块,然后继续。一个简单的规则是,最初分配您认为是期望值平均数的2 sigma倍的值(例如,如果您认为文件通常包含100个值,那么您可能会首先分配150个插槽的缓冲区),以处理大多数情况,而只需初始分配。如果需要重新分配,则将分配的最后一个缓冲区的大小增加一倍(例如,切换到300600,…)。这使得重新分配开销非常低


第三种选择是在一组固定大小的缓冲区中收集值(例如,为每个新块分配100个插槽),并在读取时填充它们。现在您有了一组缓冲区(您可以将它们链接到线性列表中,或者使用上一段中的技术构建一个数组来跟踪它们)。这样做的缺点是使您的排序复杂化,因此我认为这不是最好的方法。

如果您正在读取文件,操作系统将为您提供“文件结束检查”。如果你逐行阅读,很容易数到行数;EndOfFile检查为真时,行计数器显示的行总数

要存储这组数字,您可能需要一个足够大的连续存储块。您可以预先确定最大大小,只需静态声明足够大的缓冲区

另一种方法是动态分配内存(请参阅对Malloc的调用或操作系统提供的类似功能),以容纳比您期望的更大的内存量,并将值填充到该空间中,直到其满为止。如果文件还有更多内容,请分配一个更大的块,复制从旧块收集到的值,释放旧块,然后继续。一个简单的规则是,最初分配您认为是期望值平均数的2 sigma倍的值(例如,如果您认为文件通常包含100个值,那么您可能会首先分配150个插槽的缓冲区),以处理大多数情况,而只需初始分配。如果需要重新分配,则将分配的最后一个缓冲区的大小增加一倍(例如,切换到300600,…)。这使得重新分配开销非常低


第三种选择是在一组固定大小的缓冲区中收集值(例如,为每个新块分配100个插槽),并在读取时填充它们。现在您有了一组缓冲区(您可以将它们链接到线性列表中,或者使用上一段中的技术构建一个数组来跟踪它们)。这样做的缺点是会使排序复杂化,因此我认为这不是最好的方法。

听起来您可能需要一些动态数据结构,或者如果必须使用静态分配的结构,则需要限制可以读取的最大行数。为什么需要将所有数据放入寄存器中?寄存器的数量有限。为什么不直接将数据读入静态或动态缓冲区?如果您不熟悉间接寻址,您可能希望研究它。听起来您可能需要一些动态数据结构,或者-如果您必须使用静态分配的结构-对您可以读取的最大行数设置上限。为什么您需要将所有数据放在寄存器中?寄存器的数量有限。为什么不直接将数据读入静态或动态缓冲区?如果你不熟悉间接称呼,你可能想研究一下。