早教吧 育儿知识 作业答案 考试题库 百科 知识分享
早教吧考试题库频道 --> 计算机类考试 -->计算机三级 -->

请编制程序,其功能是:求I×J矩阵的转置矩阵(矩阵中元素为字节型),并计算转置矩阵的每一行元素之和

题目

请编制程序,其功能是:求I×J矩阵的转置矩阵(矩阵中元素为字节型),并计算转置矩阵的每一行元素之和,然后存放在每一行最后一个字单元中。

例如:

内存中有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之间已经给出的一段源程序使其完整,需填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),也可以填入功能相当的多条指令,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。

试题程序:

参考答案
正确答案:(1)ADCCH0 (2)CMPDXI (3)ADDDI2 (4)INC BX (5)LPJ
(1)ADCCH,0 (2)CMPDX,I (3)ADDDI,2 (4)INC BX (5)LPJ 解析:此程序要实现的功能是:先求I×J矩阵的转置矩阵(矩阵中元素为字节型),再计算转置矩阵的每一行元素之和,然后存放在每一行最后一个字单元中。
先给N赋值为30,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中。再将CL与AL相加,加法结果可能产生进位,即CF=1,将进位放在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"。这样就完成了矩阵的转置和每一行元素的求和的功能。
看了请编制程序,其功能是:求I×J...的网友还看了以下: