汇编语言计算平均数:去除最大最小值

3星 · 超过75%的资源 需积分: 45 38 下载量 156 浏览量 更新于2024-09-12 3 收藏 28KB DOC 举报
"该资源是一个使用汇编语言编写的程序,用于计算并显示10个10以下的数字(去掉了最大和最小值)的平均数。程序通过debug进行了调试,作者是160409108,日期为2011年11月12日。程序首先显示提示信息,让用户输入10个数字,然后利用冒泡排序法对这些数字进行排序,去掉最大值和最小值,最后计算剩下的8个数字的平均数,并将结果以保留3位小数的形式显示在显示器上。" 在这个汇编语言程序中,主要涉及以下几个知识点: 1. **数据段(Data Segment)**: - `DATASEGMENT` 和 `DATAENDS` 定义了一个数据段,用于存储程序中的常量、变量等数据。`BUFDB?` 表示定义了一个字节大小的缓冲区,用于存放用户输入的数字,`TABLEDB?` 用于存储经过处理后的数值。 2. **地址组织(ORG10H)**: - `ORG10H` 指定了程序在内存中的起始地址,这里的 `10H` 是16进制表示,转换成10进制是16。 3. **字符串操作**: - `BUF1DB 'PLEASEENTER10NUMBERS$'` 和 `BUF2DB 'THEAVERAGEIS$'` 分别定义了两个字符串常量,用于显示提示信息和结果。 4. **中断调用(Interrupts)**: - `INT21H` 被用来调用DOS中断,这里用到的是9号功能(`MOVAH,9`)显示字符串,2号功能(`MOVAH,02H`)输出字符,1号功能(`MOVAH,1`)读取用户输入。 5. **循环结构**: - `LP1:` 和 `LOOPLP1:` 以及 `STOP:` 是程序中的循环结构,用于接收10个用户输入的数字。 6. **数学运算**: - `SUBAL,30H` 用于将ASCII码转换为十进制数。 - `ADDAL,[SI]` 用于累加数组中的数字。 - `DIVCL` 用于除法运算,AX作为被除数,CL作为除数,商在AL中,余数在AH中。 7. **冒泡排序法(Bubble Sort)**: - 程序使用冒泡排序法对输入的10个数字进行排序,通过 `LOP1:` 和 `LOP0:` 以及 `JLENEXT` 来实现比较和交换。 8. **条件判断**: - `JLENEXT` 和 `JZSTOP` 等跳转指令用于控制流程,根据比较结果决定是否继续执行或结束循环。 9. **存储器操作**: - `MOVSI,OFFSET BUF` 和 `MOVDI,OFFSET TABLE` 分别设置源和目的指针,用于遍历数组。 - `MOV[DI],AL` 和 `MOV[DI],AH` 用于将计算结果存储到特定内存位置。 10. **结果处理**: - 程序通过 `DIVCL` 计算平均值,结果分别存放在 `AL`(商)和 `AH`(余数)中,最后将结果显示在屏幕上。 这个程序展示了如何在汇编语言环境中实现基本的用户交互、数据处理、排序算法和结果输出等功能,对于学习汇编语言编程的学生来说,是一个很好的实践案例。