A-A+

请编制程序 其功能为:内存中连续存放着20个无符号字节数 求它们的和。和值按字的形式存放 此

2022-08-05 20:37:08 问答库 阅读 171 次

问题详情

请编制程序,其功能为:内存中连续存放着20个无符号字节数,求它们的和。和值按字的形式存放,此前先按序存放参加运算的20个字节。
例如;
内存中有:01H,02H,03H ……
结果为:01H,02H,03H …… (参加运算的字节),后跟一个字(为前面各字节的和)
部分程序已经给出,其中原始数据由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 20
DSEG SEGMENT
SOURCE DW N DUP ()
RESULT DW N DUP (0)
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, DS:DSEG;SS;SSEG
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX, DSEG
MOV DS,AX
LEA DX,SOURCE
LEA SI,NAME0
MOV CX,N
CALL LOAD
; *** BEGIN ***
LEA SI,SOURCE
LEA DI,RESULT
MOV CX,N
MOV BX,0
NEXT: MOV AL,[SI]
____________
____________
MOV [DI],______
____________
____________
LOOP NEXT
MOV [DI],______
; *** END ***
LEA DX,RESULT
LEA SI,NAME1
MOV CX,N+2
CALL SAVE
RET
START ENDP
CSEG ENDS
END START请帮忙给出正确答案和分析,谢谢!

参考答案

正确答案:; *** BEGIN ***LEA SI SOURCELEA DI RESULTMOV CXNMOV BX 0NEXT: MOV AL [SI]ADD BL AL ; 将 SOURCE 原始数据区中相应的数累加。; BLADC BH 0 ; 将上一条加法指令中产生的进位加入至和; 值的高8位BH 中MOV [DI]AL ; 将 SOURCE 原始数据区中的数存入; RESULT 相应单元INC SIINC DILOOP NEXT ; (CX)-1 若 (CX)≠0则转移NEXTMOV [DI]BX ; 因最后依次循环中 DI 已加1故BX将紧; 跟在这20个数之后存入; *** END ***[INPUT1.DAT 中的输入数据]:FFH8OH7FHFOH 14H84H25H7EH3 CH45HFFH80HO1HO2H22HFCHE3HA3H12H01H[输出结果]FF 80 7F F0 14 84 25 7E 3C 45 FF 80 01 02 22 FC113 A3 12 01 E3 08
; *** BEGIN ***LEA SI, SOURCELEA DI, RESULTMOV CX,NMOV BX, 0NEXT: MOV AL, [SI]ADD BL, AL ; 将 SOURCE 原始数据区中相应的数累加。; BLADC BH, 0 ; 将上一条加法指令中产生的进位加入至和; 值的高8位BH 中MOV [DI],AL ; 将 SOURCE 原始数据区中的数存入; RESULT 相应单元INC SIINC DILOOP NEXT ; (CX)-1, 若 (CX)≠0,则转移NEXTMOV [DI],BX ; 因最后依次循环中 DI 已加1,故BX将紧; 跟在这20个数之后存入; *** END ***[INPUT1.DAT 中的输入数据]:FFH,8OH,7FH,FOH, 14H,84H,25H,7EH,3 CH,45H,FFH,80H,O1H,O2H,22H,FCH,E3H,A3H,12H,01H[输出结果]FF 80 7F F0 14 84 25 7E 3C 45 FF 80 01 02 22 FC113 A3 12 01 E3 08

考点:字节,符号