请编制程序PROG1.ASM,其功能是:对内存中连续存放着20个补码表示的无符号整数进行从大到小的排序,结果存放在RESULT开始的内存单元中。 部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。

admin2009-02-15  33

问题 请编制程序PROG1.ASM,其功能是:对内存中连续存放着20个补码表示的无符号整数进行从大到小的排序,结果存放在RESULT开始的内存单元中。
   部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文刊:OUTPUT1.DAT中。请在BEGIN和END之间补充一段源程序,完成要求的功能。
   对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。
   试题程序:
              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        128 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
              MOV       ES,AX
              LEA       DX,SOURCE     ; 数据区起始地址
              LEA       SI,NAMEO      ; 原始数据文件名
              MOV       CX.N          ; 字节数
              CALL      LOAD          ; 从’INPUT1.DAT中读取数据’
   ;****BEGIN****
              ……
              ……
              ……  
   ;****END****
              LEA       DX,RESULT    ; 结果数据区首址
              LEA       SI,NAME1     ; 结果文件名
              MOV       CX,N         ; 结果字节数
              CALL      SAVE         ; 保存结果到文件
   RET
   START      ENDP
   CSEG       ENDS
              END       START

选项

答案; ****BEGIN**** MOV DX,N DEC DX L1: LEA SI,SOURCE MOV CX,DX MOV BX,0 L2: MOV AL,[SI] INC SI CMP AL,[SI] JAE L3 MOV AH,[SI] MOV [SI] ,AL MOV [SI-1],AH MOV BX, I L3: LOOP L2 CMP BX,0 JZ STORE DEC DX JNZ L1 STORE: MOV CX,N LEA SI,SOURCE LEA DI,RESULT CLD REP MOVSB ; ****END****

解析 本题可采用冒泡排序算法。对于SOURCE开始的20个内存单元中的无符号数,依次将相邻的两个数进行比较,每次将较小的数调整到后面。经过一轮比较后,最小的数排到第 20个位置;再将剩下的19个数两两进行比较,排在第19个位置上的数为次小数;重复比较共19遍,完成排序操作。
转载请注明原文地址:https://kaotiyun.com/show/1MrZ777K
0

最新回复(0)