南开大学PC技术编程挑战:内存数组正负数分类与计数

需积分: 3 3 下载量 100 浏览量 更新于2024-07-30 收藏 611KB DOC 举报
南开大学的上机100题涉及了PC技术中基础编程的一个实战题目,针对全国计算机等级考试三级的要求。题目要求编写一个程序,该程序的任务是对内存中的40个有符号字节数组进行分类,将正数存储到一个数组(PDATA)中,负数存储到另一个数组(NDATA)中。同时,程序还需要统计正数和负数的数量,并将这些计数结果显示在RESULT指定的位置。输出格式为正数个数在前,随后是正数数组元素,接着是负数个数,最后是负数数组元素。 具体实现步骤如下: 1. 首先,定义了栈段(STACK)、数据段(DATA)和代码段(CODE),并设置了默认段寄存器值。 2. 在代码段的STARTPROC函数中,通过调用EXTRNLOAD和SAVE远距离调用,可能是用来加载或保存数据到文件的功能。 3. 在数据段中,定义了SOURCE变量指向40个字节的数组,RESULT用于存放结果,以及两个临时数组NAME0和NAME1分别存储输入和输出文件名,以及NDATA和PDATA作为分类后的数组。 4. 主程序部分开始,首先将源地址SOURCE加载到AX,然后设置循环条件,读取每一个字节(AL)。 5. 在主循环(MAIN1)中,通过测试AL的符号位(通过XOR DX, AL和TEST AL, 80H来判断是否为负数),将正数(非零)存入PDATA数组,负数(零)存入NDATA数组。 6. 循环结束后,统计正数和负数的数量,正数数量存入RESULT,然后跳转回主循环(MAIN1)继续处理剩余的字节,直到遍历完40个字节。 7. 在每个元素存入相应数组后,程序会更新正数计数器(CX)和结果区(RESULT),当读取到最后一个正数时,将计数器的值(正数个数)存入RESULT,并继续更新计数器为0,准备存储下一个负数。 8. 通过循环结构(MOVAL, CX)和INCDI将计数器(正数个数)存入RESULT后,继续处理负数数组,直到所有数据处理完毕。 此题考察了程序员对基本的数据结构处理、逻辑判断、以及文件操作的理解,同时锻炼了对内存管理和控制转移指令的运用。在实际编程过程中,理解并实现这样的逻辑结构对于提高编程能力至关重要。