微机原理实验报告-冒泡排序

2019-03-28 17:12

一、实验目的

(1)学习汇编语言循环结构语句的特点,重点掌握冒泡排序的方法。 (2)理解并掌握各种指令的功能,编写完整的汇编源程序。

(3)进一步熟悉DEBUG的调试命令,运用DEBUG进行调试汇编语言程序。

二、实验内容及要求

(1)实验内容:从键盘输入五个有符号数,用冒泡排序法将其按从小到大的顺序排序。 (2)实验要求:

①编制程序,对这组数进行排序并输出原数据及排序后的数据;

②利用DEBUG调试工具,用D0命令,查看排序前后内存数据的变化;

③去掉最大值和最小值,求出其余值的平均值,输出最大值、最小值和平均值; ④用压栈PUSH和出栈POP指令,将平均值按位逐个输出; ⑤将平均值转化为二进制串,并将这组二进制串输出; ⑥所有数据输出前要用字符串的输出指令进行输出提示,所有数据结果能清晰显示。

三、程序流程图

开始 (1)主程序:MAIN

初始化

键盘输入数据

调用INPUT子程序

输入是否正确

显示原始数据

调用OUTPUT子程序

显示输入错误

显示冒泡排序后的数据 调用SORT子程序 调用OUTPUT子程序 显示最小值Min 显示One子程序 显示最大值Max 调用One子程序 显示其余数平均值Average 调用One子程序 显示平均值二进制串Binary 调用One子程序 结束 (2)冒泡排序子程序: SORT

COUNT1 ---- 外循环次数

COUNT2 ---- 内循环次数

i ---- 数组下标 否 是 否 是 否 是

进入 初始化 COUNT1=N-1 COUNT2=COUNT1 SI=0 Ai≥Ai+1 Ai与Ai+1两数交换 SI=SI+2 COUNT2=COUNT2-1 COUNT2=0? COUNT1=COUNT1-1 COUNT2=0? 返回 四、程序清单

NAME BUBBLE_SORT DATA SEGMENT

ARRAY DW 5 DUP(?) ;输入数据的存储单元 COUNT DW 5 TWO DW 2

FLAG1 DW 0 ;判断符号标志

FLAG2 DB 0 ;判断首位是否为零的标志 FAULT DW -1 ;判断出错标志 CR DB 0DH,0AH,'$'

STR1 DB 'Please input five numbers seperated with space and finished with Enter:','$' STR2 DB 'The original numbers:','$' STR3 DB 'The sorted numbers:','$' STR4 DB 'The Min:','$' STR5 DB 'The Max:','$' STR6 DB 'The Average:','$'

STR7 DB 'The binary system of the average :','$' STR8 DB 'Input error!Please input again!''$' DATA ENDS

CODE SEGMENT MAIN PROC FAR

ASSUME CS:CODE,DS:DATA,ES:DATA START: PUSH DS AND AX,0 PUSH AX

MOV AX,DATA MOV DS,AX LEA DX,STR1

MOV AH,09H ;9号DOS功能调用,提示输入数据 INT 21H

CALL CRLF ;回车换行

REIN: CALL INPUT ;调用INPUT子程序,输入原始数据 CMP AX,FAULT ;判断是否出错, JE REIN ;出错则重新输入 LEA DX,STR2

MOV AH,09H ;9号DOS功能调用,提示输出原始数据 INT 21H

CALL OUTPUT ;调用OUTPUT子程序,输出原始数据 CALL SORT ;调用SORT子程序,进行冒泡排序 LEA DX,STR3

MOV AH,09H ;9号DOS功能调用,提示输出排序后的数据 INT 21H

CALL OUTPUT ;调用OUTPUT子程序,输出排序后的数据

AND SI,0 AND BX,0

MOV BX,ARRAY[SI] ;将最小值存入BX LEA DX,STR4

MOV AH,09H ;9号DOS功能调用,提示输出数据的最小值 INT 21H

CALL ONE ;调用ONE子程序,输出最小值 CALL CRLF

LEA DX,STR5

MOV AH,09H ;9号DOS功能调用,提示输出排序后的最大值 INT 21H

MOV BX,ARRAY[SI+8] ;将最大值存入BX

CALL ONE ;调用ONE子程序,输出最大值 CALL CRLF

LEA DX,STR6

MOV AH,09H ;9号DOS功能调用,提示输出平均值 INT 21H AND DX,0

MOV AX,ARRAY[SI+2] ;将去掉最大最小值的其余各数之和存入AX ADD AX,ARRAY[SI+4] ADC AX,ARRAY[SI+6]

MOV CX,COUNT ;计数器CX=5 DEC CX ;CX←CX-1 DEC CX

DIV CX ;字除法,余数存入AX

MOV BX,AX ;将余下各数的平均值存入BX

CALL ONE ;调用ONE子程序,输出去掉最大最小值的其余数平均值 CALL CRLF

LEA DX,STR6

MOV AH,09H ;9号DOS功能调用,提示输出平均值的二进制串 MOV CX,16 ;16位二进制串,计数器初始值为16 LL1: AND DX,0 DIV TWO PUSH DX LOOP LL1

MOV CX,16 LL2: POP DX

ADD DL,30H ;将DL中的数进行ASCII码转换

MOV AH,2 ;2号DOS功能调用,输出字符“0”或“1” INT 21H LOOP LL2

MOV AH,4CH

INT 21H ;4C号功能调用,返回DOS MAIN ENDP


微机原理实验报告-冒泡排序.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:江苏省建筑工程施工质量验收资料DQ(电气) - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: