请编制程序PROG1.ASM,其功能是:计算10×3矩阵中每一行元素(八位二进制数)之和,并将其存放在指定的内存区中。 例如: 内存中有0,0,0,(第1行),1,1,1,(第2行),……,9,9,9(第10行) 结果为0000H,000

admin2009-02-15  25

问题 请编制程序PROG1.ASM,其功能是:计算10×3矩阵中每一行元素(八位二进制数)之和,并将其存放在指定的内存区中。
   例如:
   内存中有0,0,0,(第1行),1,1,1,(第2行),……,9,9,9(第10行)
   结果为0000H,0003H,…,001BH
   部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存元中,转换结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。填空BEGIN和END之间已经给出的一段源程序使其完整,填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),考生也可以填入功能相当的多条指令,或删去BEGIN和END之间原有的代码并自行编程来完成要求的功能。
   对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果 (无结果或结果不正确者均不得分)。
   PROG1.ASM文件内容如下:
                          EXTRN          LOAD: FAR, SAVE: FAR
           N              EQU 30
           DSEG           SEGMENT
           SOURCE         DB             N   DUP( ? )
           RESULT         DW             N/3 DUP(0)
           I              EQU            10
           J              EQU            3
           NAME0          DB             ’INPUT1. DAT’ ,0
           NAME1          DB             ’OUTPUT1. DAT’ ,0
           DSEG           ENDS
           SSEG           SEGMENT STACK
                          DB             256 DUP(?)
           SSEG           ENDS
           CSEG           SEGMENT
                          ASSUME  CS: CSEG, SS: SSEG, DS: DSEG
           START          PROC           FAR
                          PUSH           DS
                          XOR            AX, AX
                          PUSH           AX
                          MOV            AX, DSEG
                          MOV            DS, AX
                          MOV            ES, AX
                          LEA            DX, SOURCE
                          LEA            SI, NAMEO
                          MOV            CX, N
                          CALL           LOAD
   ;   * * *  BEGIN * * *
                          LEA            SI, SOURCE
                          LEA            DI, RESULT
                          MOV            BX, 1
   LPI:                   MOV            DX,O
                          MOV            CX, 1
   LPJ:                   MOV            AL, [SI]
                          _____
                          ADD            DX, AX
                          INC
                          INC            CX
                          CMP            CX,
                          JBE            LPJ
                          MOV            [DI],_____
                          ADD            DI,_____
                          INC            BX
                          CMP            BX, I
                          JBE            LPI
   ;   * * * END * * *
                          LEA            DX, RESULT
                          LEA            SI, NAME1
                          MOV            CX, N/3
                          CALL           SAVE
                          RET
   START                  ENDP
   CSEG                   ENDS
                          END            START

选项

答案;* * * BECIN * * * LEA SI,SOURCE LEA DI,RESULT MOV BX,1 ;设置BX,BX用于行处理计数 LPI:MOV DX,0 ;LPI用于每行处理前的设初值;DX用于每行累计求和 MOV CX,1 ;CX用于每行求和计数 LPJ: MOV AL,[SI] CBW ;将AL字节的符号扩展到AH中 ADD DX,AX ;求和 INC SI ;SI指向下一个存储单元 INC CX ;每加一次CX累加1 CMP CX,3 ;若CX大于3,则此行求和结束 JBE LPJ ;否则此行继续求和 MOV [DI], DX ;和值存入目的存储区 ADD DI,1 ;DI指向目的存储区下一个存储单元 INC BX ;累计处理过的行数 CMP BX,I ;若BX大于I,则整个求和存储过程完成,否则返回LPI继续求和 JBE LPI ; * * * END * * * 输入数据: 0101010202020303030404040 50505060606070707080808090909101010 输出结果: 03 06 09 0C 0F 12 15 18 1B 30

解析
转载请注明原文地址:https://kaotiyun.com/show/2MrZ777K
0

最新回复(0)