请编制程序,其功能是:内存中存放着由20个16位有符号整数组成的序列,求出该序列中的最小值和最大值。结果存放形式为,先按原顺序存放20个需处理的有符号整数,后跟该序列中的最小值和最大值(最小值在前,最大值在后)。 例如: 内存中有:8100H,

admin2010-09-01  30

问题 请编制程序,其功能是:内存中存放着由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

选项

答案(1) MOV DX,[SI] (2) MOV CX,N-1 (3) MIN(4) JGE (5) MOV [DI],DX (6) MOV [DI],BX

解析 本题是一道最值计算题。最值计算包括求最大值和最小值两种情况,通常采用的力法是将第一个数假设为最大值和最小值,分别保存到表示最大值和最小值的变量中,再将后续数据分别与最大值数据和最小值数据进行比较,如果发现比最大值更大的数,则用新的数替换原来的最大值,如果发现比最小值更小的数,则用新的数替换最小值,直到处理完最后一个数为止,便可以同时得到最大值和最小值。
转载请注明原文地址:https://kaotiyun.com/show/STgZ777K
0

最新回复(0)