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

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

WORD格式

一、实验目的

(1)学习汇编语言循环结构语句的特点,重点掌握冒泡排序的方法。

(2)理解并掌握各种指令的功能,编写完整的汇编源程序。

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

二、实验内容及要求

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

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

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

③去掉最大值和最小值,求出其余值的平均值,输出最大值、最小值和平均值;

④用压栈PUSH和出栈POP指令,将平均值按位逐个输出;

⑤将平均值转化为二进制串,并将这组二进制串输出;

⑥所有数据输出前要用字符串的输出指令进行输出提示,所有数据结果能清晰显示。

三、程序流程图

始(1)主程序:MAIN

初始化

键盘输入数据

调用INPUT子程序

显示输入错误

输入是否正确

显示原始数据

调用OUTPUT子程序

WORD格式

显示冒泡排序后的数据

调用SORT子程序

调用OUTPUT子程序

显示最小值Min

显示One子程序

显示最大值Max

调用One子程序

显示其余数平均值Average

调用One子程序

显示平均值二进制串Binary

调用One子程序

结束

(2)冒泡排序子程序:SORT

COUNT1----外循环次数

进入COUNT2----内循环次数

i----数组下标

初始化

COUNT1=N-1

COUNT2=COUNT1

SI=0

Ai≥i A+1

Ai与A i+1两数交换

SI=SI+2

COUNT2=COUNT2-1

COUNT2=0?

COUNT1=COUNT1-1

COUNT2=0?

返回

四、程序清单

NAMEBUBBLE_SORT

DATASEGMENT

ARRAYDW5DUP(?);输入数据的存储单元

COUNTDW5

TWODW2

FLAG1DW0;判断符号标志

FLAG2DB0;判断首位是否为零的标志

FAULTDW-1;判断出错标志

CRDB0DH,0AH,'$'

STR1DB'PleaseinputfivenumbersseperatedwithspaceandfinishedwithEnter:','$' STR2DB'Theoriginalnumbers:','$'

STR3DB'Thesortednumbers:','$'

STR4DB'TheMin:','$'

STR5DB'TheMax:','$'

STR6DB'TheAverage:','$'

STR7DB'Thebinarysystemoftheaverage:','$'

STR8DB'Inputerror!Pleaseinputagain!''$'

DATAENDS

CODESEGMENT

MAINPROCFAR

ASSUMECS:CODE,DS:DATA,ES:DATA

START:PUSHDS

ANDAX,0

PUSHAX

MOVAX,DATA

MOVDS,AX

LEADX,STR1

MOVAH,09H;9号DOS功能调用,提示输入数据

INT21H

CALLCRLF;回车换行

REIN:CALLINPUT;调用INPUT子程序,输入原始数据

CMPAX,FAULT;判断是否出错,

JEREIN;出错则重新输入

LEADX,STR2

MOVAH,09H;9号DOS功能调用,提示输出原始数据

INT21H

CALLOUTPUT;调用OUTPUT子程序,输出原始数据

CALLSORT;调用SORT子程序,进行冒泡排序

LEADX,STR3

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

INT21H

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

ANDSI,0

ANDBX,0

MOVBX,ARRAY[SI];将最小值存入BX

LEADX,STR4

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

INT21H

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

CALLCRLF

LEADX,STR5

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

INT21H

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

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

CALLCRLF

LEADX,STR6

MOVAH,09H;9号DOS功能调用,提示输出平均值

INT21H

ANDDX,0

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

ADDAX,ARRAY[SI+4]

ADCAX,ARRAY[SI+6]

MOVCX,COUNT;计数器CX=5

DECCX;CX←CX-1

DECCX

DIVCX;字除法,余数存入AX

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

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

LEADX,STR6

MOVAH,09H;9号DOS功能调用,提示输出平均值的二进制串

MOVCX,16;16位二进制串,计数器初始值为16

LL1:ANDDX,0

DIVTWO

PUSHDX

LOOPLL1

MOVCX,16

LL2:POPDX

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

MOVAH,2;2号DOS功能调用,输出字符“0”或“1”

INT21H

LOOPLL2

MOVAH,4CH

INT21H;4C号功能调用,返回DOS

MAINENDP

相关文档
最新文档