请编制程序,其功能是:内存中存放着由20个16位有符号整数组成的序列,求出该序列中的最小值和最大值。结果存放形式为,先按原顺序存放20个需处理的有符号整数,后跟该序列中的最小值和最大值(最小值在前,最大值在后)。例如:内存中有:8100H,0002H,0300H…结果为: 8100H,0002H,0300H… (由20个16位有符号整数组成的原序列),结果的后面跟该序列中的最小值和最大值(最小值在前,最大值在后)。部分程序已给出,其中原始数据由过程LOAD从文件INPUT.DAT中读入SOURCE开始的内存单元中,运算结果要求从 RESULT开始存放,由过程SAVE保存到文件OUTPUT.DAT中。请填空BEGIN和END之间已给出的源程序使其完整,空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删除BEGIN和END之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。【试题程序】XTRN LOAD:FAR,SAVE:FARN EQU 20STAC EGMENT STACKB 128 DUP(?)STAC NDSDATA SEGMENTSOURCE DW N DUP(?)RESULT DW (N+2)DUP(0)NAME0 DB 'INPUT.DAT',0NAME1 DB 'OUTPUT.DAT',0DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXLEA DX,SOURCE ; 数据区起始地址LEA SI,NAME0 ; 原始数据文件名MOV CX,N*2 ; 字节数CALL LOAD ; 从'INPUT.DAT'中读取数据; ******** BEGIN ********LEA SI,SOURCELEA DI,RESULTMOV BX, [SI] ; 第一个整数既为最大值(1) ; 又为最小值MOV [DI],BXADD SI,2ADD DI,2(2)NEXT: MOV AX,[SI]CMP AX,BXJLE (3)MOV; BX,AXJMP ENDLMIN: CMP AX,DX(4) ENDLMOV DX, AXENDL: MOV [DI], AXADD SI,2ADD DI,2LOOP NEXT(5)ADD DI,2(6); ******** END ********LEA DX,RESULT ; 结果数据区首址LEA SI,NAME1 ; 结果文件名NOV CX,(2+N)*2 ; 结果字节数CALL SAVE ; 保存结果到文件RETSTART ENDPCODE ENDSEND START
请编制程序,其功能是:内存中存放着由20个16位有符号整数组成的序列,求出该序列中的最小值和最大值。结果存放形式为,先按原顺序存放20个需处理的有符号整数,后跟该序列中的最小值和最大值(最小值在前,最大值在后)。
例如:
内存中有:8100H,0002H,0300H…
结果为: 8100H,0002H,0300H… (由20个16位有符号整数组成的原序列),结果的后面跟该序列中的最小值和最大值(最小值在前,最大值在后)。
部分程序已给出,其中原始数据由过程LOAD从文件INPUT.DAT中读入SOURCE开始的内存单元中,运算结果要求从 RESULT开始存放,由过程SAVE保存到文件OUTPUT.DAT中。
请填空BEGIN和END之间已给出的源程序使其完整,空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删除BEGIN和END之间原有的代码并自行编程来完成所要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。
【试题程序】
XTRN LOAD:FAR,SAVE:FAR
N EQU 20
STAC EGMENT STACK
B 128 DUP(?)
STAC NDS
DATA SEGMENT
SOURCE DW N DUP(?)
RESULT DW (N+2)DUP(0)
NAME0 DB 'INPUT.DAT',0
NAME1 DB 'OUTPUT.DAT',0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
LEA DX,SOURCE ; 数据区起始地址
LEA SI,NAME0 ; 原始数据文件名
MOV CX,N*2 ; 字节数
CALL LOAD ; 从'INPUT.DAT'中读取数据
; ******** BEGIN ********
LEA SI,SOURCE
LEA DI,RESULT
MOV BX, [SI] ; 第一个整数既为最大值
(1) ; 又为最小值
MOV [DI],BX
ADD SI,2
ADD DI,2
(2)
NEXT: MOV AX,[SI]
CMP AX,BX
JLE (3)
MOV; BX,AX
JMP ENDL
MIN: CMP AX,DX
(4) ENDL
MOV DX, AX
ENDL: MOV [DI], AX
ADD SI,2
ADD DI,2
LOOP NEXT
(5)
ADD DI,2
(6)
; ******** END ********
LEA DX,RESULT ; 结果数据区首址
LEA SI,NAME1 ; 结果文件名
NOV CX,(2+N)*2 ; 结果字节数
CALL SAVE ; 保存结果到文件
RET
START ENDP
CODE ENDS
END START