问答题

请编制程序,其功能是:从第0行第0列开始,依次取出N阶矩阵中对角线上的元素(字节型)并计算累加和(字型),然后将其存放在指定的内存区中。<br>例如:<br>内存中有:01H,01H,01H,02H,02H,02H,03ff,03H,03H<br>结果为: 01H,02H,03H,06H,00H<br>部分程序已给出,其中原始数据由过程LOAD从文件INPUT.DAT中读入SOURCE开始的内存单元中,转换结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT.DAT中。<br>请填空BEGIN和END之间已经给出的一段源程序使其完整,需填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),也可以填入功能相当的多条指令,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。<br>对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。<br>【试题程序】<br>EXTRN LOAD:FAR, SAVE:FAR<br>N EQU 10<br>DSEG SEGMENT<br>SOURCE DB N*10 DUP()<br>RESULT DB (N+2) DUP(0)<br>NAME0 DB 'INPUT.DAT',0<br>NAME1 DB 'OUTPUT.DAT',0<br>DSEG ENDS<br>SSEG SEGMENT STACK<br>DB 256 DUP ()<br>SSEG ENDS<br>CSEG SEGMENT<br>ASSUME CS:CSEG, SS:SSEG, DS:DSEG<br>START PROC FAR<br>PUSH DS<br>XOR AX,AX<br>PUSH AX<br>MOV AX,DSEG<br>MOV DS,AX<br>MOV ES,AX<br>LEA DX, SOURCE<br>LEA SI,NAME0<br>MOV CX,N*10<br>CALL LOAD<br>******** BEGIN ********<br>LEA DI,RESULT<br>MOV CX,0<br>MOV DH,0 ;行<br>MOV DL,0 ;行<br>NEXT: MOV AL,N<br>MUL (1)<br>MOV BX,AX<br>MOV AL,DL<br>(2)<br>MOV SI, AX ;列号送SI<br>MOV AL, (3) [BX+SI]<br>MOV [DI],AL<br>ADD CL,AL<br>(4)<br>INC DI<br>INC DH<br>INC DL<br>CMP DL, (5)<br>JNE NEXT<br>MOV [DI],CX<br>; ******** END ********<br>LEA DX,RESULT<br>LEA &


火星搜题