1、三级 PC技术机试-160 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序,其功能是:求 IJ矩阵的转置矩阵(矩阵中元素为字节型),并计算转置矩阵的每一行元素之和,然后存放在每一行最后一个字单元中。例如:内存中有 04H,05H,06H,(第一行)01H,02H,03H(第二行)结果为 04H,01H,05H,00H,05H,02H,07H,00H,06H,03H,09H,00H部分程序已给出,其中原始数据由过程 LOAD从文件 1NPUT1.DAT中读入 SOURCE开始的内存单元中。运算结果要求从 RESULT开始存放,由过
2、程 SAVE保存到文件 OUTPUT1.DAT中。请填空 BEGIN和 END之间已经给出的一段源程序使其完整,需填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),也可以填入功能相当的多条指令,或删去 BEGIN和 END之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与 IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。试题程序:(分数:100.00)_三级 PC技术机试-160 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制
3、程序,其功能是:求 IJ矩阵的转置矩阵(矩阵中元素为字节型),并计算转置矩阵的每一行元素之和,然后存放在每一行最后一个字单元中。例如:内存中有 04H,05H,06H,(第一行)01H,02H,03H(第二行)结果为 04H,01H,05H,00H,05H,02H,07H,00H,06H,03H,09H,00H部分程序已给出,其中原始数据由过程 LOAD从文件 1NPUT1.DAT中读入 SOURCE开始的内存单元中。运算结果要求从 RESULT开始存放,由过程 SAVE保存到文件 OUTPUT1.DAT中。请填空 BEGIN和 END之间已经给出的一段源程序使其完整,需填空处已经用横线标出,
4、每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),也可以填入功能相当的多条指令,或删去 BEGIN和 END之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与 IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。试题程序:(分数:100.00)_正确答案:(1)ADCCH,0(2)CMPDX,I(3)ADDDI,2(4)INC BX(5)LPJ)解析:解析此程序要实现的功能是:先求 IJ矩阵的转置矩阵(矩阵中元素为字节型),再计算转置矩阵的每一行元素之和,然后存放在每一行最后一个字单元中。先给 N赋值为 30,
5、I 赋值为 3,J 赋值为 10。程序的数据段中定义了四个字节型变量:原始数据区 SOURCE、结果数据区 RESULT、原始数据文件名NAME0、结果数据文件名 NAME1;一个字型变量:SRC。数据段下面是堆栈段。堆栈段定义了一个 256个字节的堆栈区。最后是代码段,告诉汇编程序,代码段、数据段和堆栈段分别属于段寄存器 CS、 DS、SS。将原始数据的偏移地址装入到 SI中,结果数据存放的偏移地址装入到 DI中。BX 赋值为 1,表示第一列。LPJ段,先给累加和 CX赋初值为 0,DX 赋值为 1,表示第一行。LPI段是要完成矩阵的转置,并且求和的功能。先将 SI中内容即原始数据送 AL中
6、。再将 CL与 AL相加,加法结果可能产生进位,即 CF1,将进位放在 DH中。所以第(1)空填写“ADCCH,0“。接着用 STOS指令将第一行第一列的元素 AL存入到 DI中。SI 地址加 10,准备取第二行的元素。同时 DX加 1,将 DX与 I做比较,若 DX小于等于 I,则说明还有若干行的元素没处理完,转向 LPI段;否则 DX大于 I时,说明 I行所有的元素都已经处理完毕了。所以第(3)空填写“CMP DX,I“。接着将 DI地址加 2。因为除了将第一列的所有元素存放到 DI中外,还存放了这些元素之和,并且和是占一个字的,即两个字节。所以第(3)空填写“ADD DI,2“。然后将表示列的 BX加 1,再将 BX与 J做比较,若 BX小于等于 J,说明还有若干列的元素没处理完,转向 LPJ段;否则,BX 大于 J时,说明 J列所有的元素都已经处理完毕了。所以,第(4)空填写“INCBX“,空第(5)空填写“LPJ“。这样就完成了矩阵的转置和每一行元素的求和的功能。