微机原理实验报告冒泡排序
一、实验目的
(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] LEA DX,STR4
MOV AH,09H INT 21H
CALL ONE CALL CRLF LEA DX,STR5
MOV AH,09H INT 21H
MOV BX,ARRAY[SI+8] CALL ONE CALL CRLF LEA DX,STR6
MOV AH,09H INT 21H AND DX,0
MOV AX,ARRAY[SI+2] ADD AX,ARRAY[SI+4] ADC AX,ARRAY[SI+6] MOV CX,COUNT DEC CX DEC CX
DIV CX MOV BX,AX CALL ONE CALL CRLF LEA DX,STR6
MOV AH,09H MOV CX,16 LL1: AND DX,0 DIV TWO PUSH DX LOOP LL1
;将最小值存入BX ;9号DOS功能调用,提示输出数据的最小值 ;调用ONE子程序,输出最小值 ;9号DOS功能调用,提示输出排序后的最大值 ;将最大值存入BX
;调用ONE子程序,输出最大值 ;9号DOS功能调用,提示输出平均值 ;将去掉最大最小值的其余各数之与存入AX ;计数器CX=5 ;CX←CX-1 ;字除法,余数存入AX
;将余下各数的平均值存入BX
;调用ONE子程序,输出去掉最大最小值的其余数平均值 ;9号DOS功能调用,提示输出平均值的二进制串 ;16位二进制串,计数器初始值为16