实验六 排序程序设计
时间:2025-07-09
时间:2025-07-09
实验六排序程序设计
一、实验目的
1. 掌握分支、循环、子程序调用等基本的程序结构。 2. 学习综合程序的设计、编制及调用。 二、实验设备
TDS-MD微机一台 三、实验内容及步骤
1、在数据区中存放着一组数,数据的个数就是数据缓冲区的长度,要求用
气泡法,对该数据区中用数据按递增关系排序 设计思想:
(1) 从最后一个数(或第一个数)开始,依次把相邻的两个数进行比较,
即第N个数与第N-1个数比较,第N-1个数与第N-2个数比较等等;若第N-1个数大于第N个数,则两者交换,否则不交换,直到N个数的相邻两个数都比较完为止。此时,N个数中的最小数将被排在N个数的最前列。
(2) 对剩下的N-1个数重复第(1)步,找到N-1个数中最小数。 (3) 重复第(2)步,直到N个数全部排序好为止。 算法的参考流程图及参考程序如图6-1所示。(规定N=10,数据区首址为3000H)。 实验步骤:
(1) 分析参考程序并将其输入,检查无误。 (2) 在数据区输入如下数据:
10 12 14 15 35 6 9 21 23 41
(3) 调通程序,并检查最后的运行结果。
>G=2000 >D3000
>0000:3000 06 09 10 12 14 15 21 23 >0000:3008 35 41 CC CCCCCCCCCC
(4) 反复修改数据区中的数,运行程序并观察结果,以验证程序的正确性。
结论:经过多次运行和观察,程序符合要求。
地址(H)助记符注释 2000 MOV CX,000A 2003 MOV SI,300A
2006 MOV BL,FF ;初始化 2008 CMP BL,FF
200B JNZ 202A ;BL不为FF则转 200D MOV BL,00
200F DEC CX ;外循环修正CX 2010 JZ 202A 2012 PUSH SI 2013 PUSH CX 2014 DEC SI
2015 MOV AL,B[SI] 2017 DEC SI
2018 CMP AL,B[SI] 201A JA 2023
201C XCHG AL,B[SI] 201E MOV B[SI+01],AL 2021 MOV BL,FF 2023 INC SI
2024 LOOP 2014 2026 POP CX 2027 POP SI 2028 JMP 2008 202A INT
图6-1 排序程序
2.学生成绩名次表
将成绩分数为1~100之间的30个成绩存入首地址为3000H的单元中,3000H+i表示学号为i的学生成绩。编写程序能在3100H开始的区域排出名次表,3100H+i为学号i的学生的名次。
程序流程图及参考程序如图6-2所示。
Y
N
→
实验步骤
(1) 按流程图编制相应的程序。 (2) 在数据区输入如下数据:
51 62 73 84 95 65 67 88 99 89 91 87 64 62 72 74 76 82 84 86 89 91 92 94 86 85 73 69 66 60 (3) 调通程序,并检查最后的运行结果。
>G=2000 >D3100
>0000:3100 CC 1E 1B 0B 0E 02 19 17 >0000:3108 09 01 07 05 0A 1A 1C 15 >0000:3110 12 11 10 0F 0B 08 06 04 >0000:3118 0B 0C 0D 14 16 18 1D CC
(4) 结论:所设计程序可以实现题目要求的功能,符合要求。