微机原理与接口技术实验——冒泡法

合集下载

微机原理实验报告冒泡法对数据排序8页

微机原理实验报告冒泡法对数据排序8页

微机原理实验报告冒泡法对数据排序8页
实验目的:通过对冒泡法进行实现,了解算法的实际应用,并且掌握编程语言的基本
技巧。

实验原理:
冒泡排序是一种简单的排序方法,它的基本思想就是通过不断交换相邻的元素,将较
小的元素交换到前面,较大的元素交换到后面,从而将整个数列按从小到大(或从大到小)的顺序进行排列。

实验步骤:
(1)首先,输入需要排序的数据,将这些数据依次存储在数组中。

(2)然后,对这个数组进行冒泡排序操作。

具体的操作是:从数组的第一个元素开始,依次比较相邻两个元素的大小关系,如果后面的元素小于前面的元素,就将它们交换位置,直到将整个数组排列好为止。

(3)最后,输出排列好的数据。

实验代码:
2. 对这个数组进行冒泡排序操作。

实验结果:
输入需要排序的 10 个整数:
5 2 4 7 9 1 3 8
6 0
冒泡排序后的结果为:
0 1 2 3 4 5 6 7 8 9
实验分析:
通过本次实验,我们成功地实现了冒泡法对数据排序的操作。

在程序的实现过程中,
我们利用了C语言中的数组和循环结构等基本语言要素,完成了对数组中的数据进行排序
的操作。

通过本次实验,我们深入了解了算法的实际应用,掌握了编程语言的基本技巧,
对于今后的学习和实践具有重要的意义。

微机上机实验冒泡排序法

微机上机实验冒泡排序法

微机上机实验冒泡排序法DATAS SEGMENTINPUT DB 'INPUT',10,13,'$'NUM1 DB 4,?,3 DUP(?)NUM2 DB 4,?,3 DUP(?)NUM3 DB 4,?,3 DUP(?)NUM4 DB 4,?,3 DUP(?)NUM5 DB 4,?,3 DUP(?)NUM DB 3 DUP (?);作为比较后交换的一个过渡AV DB ?,?,?PAIXU DB 'PAI XU HOU DE SHU ZHI',10,13,'$'MAX DB 'ZUI DA ZHI SHI',10,13,'$'MIN DB 'ZUI XIAO ZHI SHI',10,13,'$'AVERAGE DB 'PING JUN SHU SHI',10,13,'$'TIME DW ?;过渡值TIME1 DB ?;过渡值CHUSHU1 DW 3CHUSHU DB 100,10HESHU DW ?STRINGS1 DB 16 DUP(?)STRINGS2 DB 'ER JIN ZHI CHUAN',10,13,'$'DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXMOV ES,AXLEA DX,INPUT;显示INPUTMOV AH,9INT 21H;*************************************************输入5个待比较数字MOV CX,5;输入五个数字MOV SI,0AGAIN:LEA DX,[NUM1+SI];输入字符串MOV AH,10INT 21HMOV DL,10;输入后换行MOV AH,2ADD SI,5;指针加5,指向下一个变量LOOP AGAIN;*************************************************比较五个数的大小,并从小到大排序CLDMOV CX,4L1: MOV BP,0PUSH CX;计数器入栈BJ:MOV AX,CXMOV CX,3LEA SI,[NUM1+BP+2];逐位比较两个数大小LEA DI,[NUM1+BP+7]REPZ CMPSBJB L2;如果小于直接比较下一个数,否则两个数对换位置MOV CX,3LEA SI,NUM1[BP+2];LEA DI,NUMREP MOVSBMOV CX,3LEA SI,NUM1[BP+7]LEA DI,NUM1[BP+2]REP MOVSBMOV CX,3LEA SI,NUMLEA DI,NUM1[BP+7]REP MOVSBL2:ADD BP,5;BP加5,执行后指向后面两个数字MOV CX,AXLOOP BJ;CX不等于零继续比较POP CX;计数器出栈LOOP L1;*************************************************输出排序后的5个数字LEA DX,PAIXU;输出字符串'PAI XU HOU DE SHU ZHI'MOV AH,9INT 21HMOV CX,5MOV SI,2OUTPUT:PUSH CX;计数器入栈MOV CX,3L3:MOV AL,[NUM1+SI];输出数字MOV AH,2INT 21HINC SILOOP L3MOV DL,3CHMOV AH,2INT 21HADD SI,2POP CX;计数器出栈LOOP OUTPUTMOV DL,10MOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21H;*************************************************求除最大最小数之外三个数的平均数MOV CX,3MOV BX,10;除数10MOV SI,2ADD0:MOV DX,0MOV AH,0MOV TIME,CX;将CX暂时放在TIME中MOV CX,3ADD1:MOV AL,[NUM2+SI];将十进制数转换为二进制数SUB AL,30HPUSH AXMOV AX,DXMUL BXMOV DX,AXPOP AXADD DX,AXINC SILOOP ADD1;每执行完一次,就完成一个3位十进制数的转换ADD SI,2MOV CX,TIMEADD HESHU,DX;将DX的数放在HESHU中LOOP ADD0;CX=0时,就完成三个十进制数转换为二进制数之后的相加和MOV DX,HESHU;MOV AX,DXXOR DX,DXDIV CHUSHU1;除3取平均值,CHUSHU1是字变量,结果将商放在AX中,余数放在DX中;*************************************************将平均数转化为相应的字符MOV BX,AX;给BX赋值平均数DIV CHUSHU;除100取最高位ADD AL,30H;转换为ASCII码MOV AV,ALMOV AL,AHXOR AH,AHDIV [CHUSHU+1];除10取十位ADD AL,30HADD AH,30H;余数就是个位MOV [AV+1],ALMOV [AV+2],AH;*************************************************输出最大数,最小数,平均数LEA DX,MAX;输出字符串'ZUI DA ZHI SHI'MOV AH,9INT 21HMOV CX,3MOV SI,2L4: MOV DL,[NUM5+SI];输出最大字MOV AH,2INT 21HINC SILOOP L4MOV DL,10;输出最大字后换行MOV AH,2INT 21HLEA DX,MIN;输出字符串'ZUI XIAO ZHI SHI'MOV AH,9INT 21HMOV CX,3MOV SI,2L5: MOV DL,[NUM1+SI];输出最小字MOV AH,2INT 21HINC SILOOP L5MOV DL,10;输出最小字后换行MOV AH,2INT 21HLEA DX,AVERAGE;输出字符串'PING JUN SHU SHI'MOV AH,9INT 21HMOV CX,3MOV SI,0L6: MOV DL,[AV+SI];输出平均数MOV AH,2INT 21HINC SILOOP L6MOV DL,10;输出最平均数后换行MOV AH,2INT 21H;*************************************************将平均数转换为二进制串,并输出LEA DX,STRINGS2 ;输出字符串'ER JIN ZHI SHU'MOV AH,9INT 21HL7: MOV CX,LENGTH STRINGS1;将平均数转换成二进制串,放在STRINGS1中LEA DI,STRINGS1PUSH CXMOV AL,30H;将STEINGS1中字符全部写为'0'REP STOSBPOP CXMOV SI,0L8: RCL BX,1JNC L9MOV [STRINGS1+SI],31HL9: MOV DL,[STRINGS1+SI];将二进制串逐个输出MOV AH,2INT 21HINC SILOOP L8MOV AH,4CHINT 21HCODES ENDSEND START。

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

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

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

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

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

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

(2)实验要求:①编制程序,对这组数进行排序并输出原数据及排序后的数据;②利用DEBUG调试工具,用D0命令,查看排序前后内存数据的变化;③去掉最大值和最小值,求出其余值的平均值,输出最大值、最小值和平均值;④用压栈PUSH和出栈POP指令,将平均值按位逐个输出;⑤将平均值转化为二进制串,并将这组二进制串输出;⑥所有数据输出前要用字符串的输出指令进行输出提示,所有数据结果能清晰显示。

三、程序流程图(1)主程序:MAIN是(2)冒泡排序子程序: SORT否是是四、程序清单NAME BUBBLE_SORTDATA SEGMENTARRAY DW 5 DUP() ;输入数据的存储单元COUNT DW 5TWO DW 2FLAG1 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 ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATA,ES:DATASTART: PUSH DSAND AX,0PUSH AXMOV AX,DATAMOV DS,AXLEA DX,STR1MOV AH,09H ;9号DOS功能调用,提示输入数据INT 21HCALL CRLF ;回车换行REIN: CALL INPUT ;调用INPUT子程序,输入原始数据CMP AX,FAULT ;判断是否出错,JE REIN ;出错则重新输入LEA DX,STR2MOV AH,09H ;9号DOS功能调用,提示输出原始数据INT 21HCALL OUTPUT ;调用OUTPUT子程序,输出原始数据CALL SORT ;调用SORT子程序,进行冒泡排序LEA DX,STR3MOV AH,09H ;9号DOS功能调用,提示输出排序后的数据 INT 21HCALL OUTPUT ;调用OUTPUT子程序,输出排序后的数据AND SI,0AND BX,0MOV BX,ARRAY[SI] ;将最小值存入BXLEA DX,STR4MOV AH,09H ;9号DOS功能调用,提示输出数据的最小值INT 21HCALL ONE ;调用ONE子程序,输出最小值CALL CRLFLEA DX,STR5MOV AH,09H ;9号DOS功能调用,提示输出排序后的最大值INT 21HMOV BX,ARRAY[SI+8] ;将最大值存入BXCALL ONE ;调用ONE子程序,输出最大值CALL CRLFLEA DX,STR6MOV AH,09H ;9号DOS功能调用,提示输出平均值INT 21HAND DX,0MOV AX,ARRAY[SI+2] ;将去掉最大最小值的其余各数之和存入AXADD AX,ARRAY[SI+4]ADC AX,ARRAY[SI+6]MOV CX,COUNT ;计数器CX=5DEC CX ;CX←CX-1DEC CXDIV CX ;字除法,余数存入AXMOV BX,AX ;将余下各数的平均值存入BXCALL ONE ;调用ONE子程序,输出去掉最大最小值的其余数平均值 CALL CRLFLEA DX,STR6MOV AH,09H ;9号DOS功能调用,提示输出平均值的二进制串MOV CX,16 ;16位二进制串,计数器初始值为16LL1: AND DX,0DIV TWOPUSH DXLOOP LL1MOV CX,16LL2: POP DXADD DL,30H ;将DL中的数进行ASCII码转换MOV AH,2 ;2号DOS功能调用,输出字符“0”或“1”INT 21HLOOP LL2MOV AH,4CHINT 21H ;4C号功能调用,返回DOSMAIN ENDP;--------------------------------------------------------------------------------------------------------------------------------子程序:CRLF功能:回车和换行;--------------------------------------------------------------------------------------------------------------------------------CRLF PROCLEA DX,CRMOV AH,09HINT 21HRETCRLF ENDP;--------------------------------------------------------------------------------------------------------------------------------子程序:INPUT功能:输入一组数据;--------------------------------------------------------------------------------------------------------------------------------INPUT PROCMOV CX,COUNT ;计数器CX=5AND SI,0NEXT1: CALL DTB ;调用DTB子程序,将输入转换为二进制数DEC CX ;CX←CX-1CMP DL,20H ;判断输入字符是否为空格符JE STOCMP DL,0DH ;判断输入字符是否为换行符JE EXIT2CALL CRLFERROR: LEA DX,STR8MOV AH,09H ;9号DOS功能调用,提示输入不合法INT 21HCALL CRLFMOV AX,FAULT ;以AX中的值作为出错标志JMP EXIT3STO: MOV ARRAY[SI],BX ;是空格符,将BX中的二进制数存入存储单元ADD SI,2JMP NEXT1EXIT2: MOV ARRAY[SI],BX ;是换行符,将BX中的二进制数存入存储单元CALL CRLFEXIT3: RETINPUT ENDP;--------------------------------------------------------------------------------------------------------------------------------子程序:DTB功能:将键盘输入的十进制数转换为二进制数形式存入BX;--------------------------------------------------------------------------------------------------------------------------------DTB PROCAND BX,0AND FLAG1,0 ;符号标志,0为正,1为负CHAR: MOV AH,01H ;1号DOS功能调用,输入一个字符,存入ALINT 21HMOV DL,ALCMP AL,2DH ;判断输入字符是否为负号"-"JNZ NEXT2MOV FLAG1,1 ;是负数,将符号标志FLAG1置1JMP CHARNEXT2: SUB AL,30H ;判断输入字符是否在0-9之间JL NEXT3CMP AL,09HJG NEXT3CBWXCHG AX,BX ;输入字符在0-9之间,将BX中的数乘以10MOV CX,10MUL CXXCHG AX,BXADD BX,AX ;将BX中的数与新输入的数相加JMP CHARNEXT3: CMP FLAG1,1 ;根据符号标志判断输入是否为负JNZ EXIT1NEG BX ;对BX中的数求补EXIT1: RETDTB ENDP;--------------------------------------------------------------------------------------------------------------------------------子程序:OUTPUT功能:输出一组数据;--------------------------------------------------------------------------------------------------------------------------------OUTPUT PROCMOV DI,COUNT ;计数器DI=5AND SI,0GO1: MOV BX,ARRAY[SI] ;将存储单元的第一组数据存入BXTEST BX,8000H ;判断正负JZ GO2MOV DL,2DHMOV AH,02H ;2号DOS功能调用,输出负号"-"INT 21HNEG BXGO2: CALL ONE ;调用ONE子程序,将BX中二进制数转换为十进制数输出 MOV DL,20HMOV AH,02H ;2号DOS功能调用,输出空格符INT 21HADD SI,2 ;指针指向下一数据DEC DI ;DI←DI-1JNZ GO1 ;计数器DI不为零,继续循环CALL CRLFRETOUTPUT ENDP;--------------------------------------------------------------------------------------------------------------------------------子程序:ONE功能:将BX中的的二进制数转换为十进制数,由高到低各位依次输出;--------------------------------------------------------------------------------------------------------------------------------ONE PROCPUSH CXPUSH SIPUSH DIMOV CX,10000 ;除数存入CXCALL BTDMOV CX,1000CALL BTDMOV CX,100CALL BTDMOV CX,10CALL BTDMOV CX,1CALL BTDADD DL,FLAG2CMP DL,30H ;与"0"的ASCII码比较,判断该数是否为"0"JNE QUIT3MOV AH,02H ;2号DOS功能调用,输出"0"INT 21HQUIT3: POP DIPOP SIPOP CXPOP BXAND FLAG2,0 ;将首位标志FLAG2重新置0RETONE ENDP;--------------------------------------------------------------------------------------------------------------------------------子程序:BTD功能:将BX中的二进制数转换为一个十进制数输出;--------------------------------------------------------------------------------------------------------------------------------BTD PROCMOV AX,BXAND DX,0DIV CX ;字除法,商值存入AX,余数存入DXMOV BX,DX ;余数存入BXMOV DL,ALADD DL,30H ;对DL中的数进行ASCII码转换CMP FLAG2,0 ;判断是否为首位数据JNE QUIT1CMP DL,30H ;是首位则判断是否为"0"JE QUIT2 ;是"0"则不输出MOV FLAG2,1 ;不是"0"将首位标志置1QUIT1: MOV AH,02H ;2号DOS功能调用,输出一位十进制数INT 21HQUIT2: RETBTD ENDP;--------------------------------------------------------------------------------------------------------------------------------子程序:SORT功能:冒泡排序;--------------------------------------------------------------------------------------------------------------------------------SORT PROCCLDMOV CX,COUNT ;初始化计数器CXDEC CX ;CX=4LOO1: MOV DI,CX ;CX中的数存入DIAND SI,0LOO2: MOV AX,ARRAY[SI]CMP AX,ARRAY[SI+2] ;相邻两数进行比较JL LOO3XCHG AX,ARRAY[SI+2] ;前一数较大则进行数据交换MOV ARRAY[SI],AXLOO3: ADD SI,2 ;前一数较小,则进行下一组比较LOOP LOO2 ;CX=0,停止内循环MOV CX,DI ;还原计数器CX的值LOOP LOO1 ;CX=0,停止外循环RETSORT ENDP;--------------------------------------------------------------------------------------------------------------------------------CODE ENDSEND START五、运行结果(1)对300,250,280,240,260五个数进行冒泡排序,运行结果如下:(2)对-1,2,54,-38,43五个数进行冒泡排序,运行结果如下(1)当输入不合法时,出现错误提示:(4)当输入数据不足5个时程序自动补0:六、心得体会在本次汇编语言程序设计实验中,我们学习了汇编语言的循环结构,并对冒泡排序法进行了汇编程序设计,我首先编写了对给定数据进行冒泡排序的算法设计,这有助于我熟悉冒泡排序的逻辑结构,理清设计思路。

单片机与接口技术实验报告--冒泡排序实验

单片机与接口技术实验报告--冒泡排序实验

本科实验报告课程名称:单片机原理与接口技术实验项目:冒泡排序实验实验地点:跨越机房专业班级:学号:学生姓名:指导教师:2012 年4 月10 日一、实验目的和要求(1)熟悉MCS-51指令系统,掌握程序设计方法。

(2)掌握排序程序算法。

(3)掌握用循环程序实现数据排序的基本方法。

二、实验内容和原理编写并调试一个通用排序子程序,其功能为将RAM的40H~4FH单元的16字节无符号二进制整数按从小到大顺序排列,将排序后数据存储于RAM的50H~5FH单元中。

三、主要仪器设备计算机一台;伟福6000四、操作方法与实验步骤(上机源程序)ORG 0000H;该段代码向数据区域40H~4FH写入20H~11HMOV R7,#10H ;数据长度→R7MOV R0,#40H ;首地址→R0MOV R1,#20H ;第一个数据→R1START: MOV A,R1 ;(R1)→AMOV @R0,A ;数据→对应地址INC R0 ;地址加1DEC R1 ;数据减1DJNZ R7,START ;判断赋值完成否MOV R7,#0FH ;数据长度-1→R7LP0: MOV R0,#40H ;数据区域首地址→R0MOV A,R7 ;(R7)→AMOV R6,A ;(R7)→R6CLR 7FH ;设定7FH位为flag,并且flag=0LP1: MOV A,@R0 ;取得数据→AMOV 20H,@R0 ;当前地址中的值暂存到20H中INC R0 ;地址加1MOV 21H,@R0 ;当前地址中的值暂存到21H中CLR C ;清CSUBB A,21H ;相邻两个数相减JC LP2 ;如果前者大于后者则交换相邻的数SETB 7FH ;flag=1MOV @R0,21H ;把前边的数赋给后一个地址DEC R0 ;地址减1MOV @R0,21H ;把后边的数赋给前一个地址INC R0 ;地址加1LP2: DJNZ R6,LP1 ;判断是否到达内循环次数JNB 7FH,LP3 ;判断是否flag=0.如果flag=0,则表示顺序已经排好DJNZ R7,LP0 ;判断是否到达外循环次数LP3: MOV R7,#10H ;获得要传输的数据个数;把40H~4FH单元中数据复制到50H~5FH单元中MOV R0,#40H ;40H→R0MOV R1,#50H ;50H→R1LP4: MOV A,@R0 ;((R0))→AMOV @R1,A ;(A)→(R1)INC R0 ;地址加1INC R1 ;地址加1DJNZ R7,LP4 ;判断赋值是否完成SJMP $ ;程序在此处死循环END五、实验数据记录和处理单步执行观察发现,每一个数都会逐次与它之后的数进行比较,排序,直到所有数据都与其后的数据比较排完后才结束。

川大微机上机实验报告(冒泡排序法)

川大微机上机实验报告(冒泡排序法)

川⼤微机上机实验报告(冒泡排序法)上机⽬的:1、了解并逐步熟悉汇编语⾔的编辑⽅法及特点.2、复习8088汇编语⾔的段结构、常⽤的指令与伪指令、存储空间的分配等。

3、掌握汇编语⾔的编辑、汇编及连接的过程。

4、了解并逐步掌握运⽤DEBUG进⾏调试汇编语⾔程序。

5、掌握循环结构程序的设计编程。

上机内容:⽤冒泡法对⼀组数300,250,280,240,260按从⼩到⼤的顺序排列。

提⽰:1、⽤冒泡的⽅法对⼀组数据元素排序,它的基本⽅法是:将相邻的两个元素通过⽐较进⾏排序,通过多次,多遍的邻元素排序,实现整个⼀组数的排序。

2、对于5(N)个元素,整个排序通过4遍(=N-1)邻元素排序完成。

每⼀遍的排序由若⼲次邻元素的排序组成。

3、4遍排序中,邻元素的排序依次为4,3,2,1遍。

完成第⼀遍排序后,最⼤数沉底,已经到达它应占据的位置,不需要参加下⼀遍的排序。

外循环的次数为CX=4次(N-1),内循环的次数为4,3,2,1(DEC CX)思考如何输⼊任意五个数,五个数可以有⼀位数,⼆位数,三位数,四位数,五位数,混合输⼊⽐较⼤⼩;2、对这组数⽤冒泡法进⾏排序,并输出原始数据及排序后数据,两两数据之间⽤空格分隔;3、利⽤DEBUG调试⼯具,⽤D0命令,查看排序前后,内存数据的变化,以及会⽤调试命令查看程序运算中寄存器中的值;4、去掉最⼤和最⼩的两个值,求出其余值的平均值,并输出最⼤值,最⼩值和平均值;5、⽤压栈PUSH和出栈POP指令“先进后出”的特点,设计算法将平7、设计程序要有模块化的思想,⽤⼦程序实现不同的功能;8、所有数据输出前要⽤字符串的输出指令,进⾏输出提⽰(如:zui dazhi shi : 300等),所有数据结果能清晰地显⽰在电脑屏幕上。

程序流程图如下:程序清单:DATAS SEGMENTSHU2 DB 4,?,3 DUP(?)SHU3 DB 4,?,3 DUP(?)SHU4 DB 4,?,3 DUP(?)SHU5 DB 4,?,3 DUP(?)AVER DB 3 DUP(?)SHUCHU DB 'PAI XU HOU DE SHU JU SHUN XU SHI',':','$'MAX DB 'ZUI DA ZHI SHI',':','$'MIN DB 'ZUI XIAO ZHI SHI',':','$'AVERAGE DB 'PING JUN ZHI SHI',':','$'CHUSHU DB 100,10HE DW ?STR1 DB 16 DUP(30H)STR2 DB 'PING JUN ZHI DE ER JIN ZHI CHUAN SHU CHU',':','$' DATAS ENDS CODES SEGMENTASSUME CS:CODES,DS:DATASSTART: MOV AX,DATASMOV DS,AXMOV ES,AXLEA DX,SHURU;显⽰QING SHU RU 5 GE SHU JU:MOV AH,9INT 21HMOV CX,5;输⼊五个数字MOV SI,0INPUT: LEA DX,[SHU1+SI];输⼊要排序的原始数据MOV AH,10INT 21HMOV DL,10;输⼊后换⾏MOV AH,2INT 21HADD SI,5;指针加5,指向下⼀个变量LOOP INPUTCLDMOV CX,4;设定排序外循环次数L1: MOV BP,0PX: PUSH CXMOV CX,3LEA SI,[SHU1+BP+2];逐位⽐较两个数⼤⼩LEA DI,[SHU1+BP+7]REPZ CMPSBJB L2;如果⼩于直接⽐较下⼀个数,否则两个数对换位置MOV CX,3Jh: MOV AL,SHU1[BP+2]XCHG AL,SHU1[BP+7];将两个字节对换位置,循环3次即完成这两个数的交换XCHG AL,SHU1[BP+2]INC BPLOOP JhSUB BP,3L2: ADD BP,5;指向后⾯两个数字POP CXLOOP PXPOP CX;外循环次数出栈LOOP L1LEA DX,SHUCHU;输出字符串'PAI XU HOU DE SHU JU SHUN XU SHI:' MOV AH,9 INT 21HMOV CX,5MOV SI,2OUTPUT:PUSH CX;计数器⼊栈实现循环嵌套MOV CX,3L3: MOV AL,[SHU1+SI];输出排序后的5个数字MOV DL,ALMOV AH,2INT 21HINC SILOOP L3MOV DL,2CHMOV AH,2INT 21HPOP CX;计数器出栈LOOP OUTPUTMOV DL,10MOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HLEA DX,MAX;输出字符串'ZUI DA ZHI SHI:' MOV AH,9INT 21HMOV SI,2L4: MOV DL,[SHU5+SI];输出最⼤值MOV AH,2INT 21HINC SILOOP L4MOV DL,10;换⾏MOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HLEA DX,MIN;输出字符串'ZUI XIAO ZHI SHI:' MOV AH,9INT 21HMOV CX,3MOV SI,2L5: MOV DL,[SHU1+SI];输出最⼩值MOV AH,2INT 21HINC SILOOP L5MOV DL,10INT 21HMOV DL,0DHMOV AH,2INT 21HLEA DX,AVERAGE;输出字符串'PING JUN ZHI SHI:'MOV AH,9INT 21HMOV CX,3MOV BX,10;除数10MOV SI,2AD: MOV DX,0MOV AH,0PUSH CXMOV CX,3ZH: MOV AL,[SHU2+SI];将⼗进制数转换为⼆进制数,为后⾯求平均值做准备 SUB AL,30H PUSH AXMOV AX,DXMUL BXPOP AXADD DX,AXINC SILOOP ZH;执⾏3次完成3个⼗进制数的转换ADD SI,2POP CXADD HE,DX;将DX的数放在HE中LOOP AD;循环后得到三个⼗进制数转换为⼆进制数之后的相加和MOV DX,HE;MOV AX,DXXOR DX,DXMOV BX,3DIV BX;除3取平均值,结果将商放在AX中,余数放在DX中MOV BX,AX;给BX赋值平均数,然后将BX中表⽰的⼗进制数转换为对应的字符串DIV CHUSHU;除100取最⾼位ADD AL,30H;转换为ASCII码DIV [CHUSHU+1];除10取⼗位ADD AL,30HADD AH,30H;余数就是个位MOV [AVER+1],ALMOV [AVER+2],AHMOV CX,3MOV SI,0L6: MOV DL,[AVER+SI];输出平均值MOV AH,2INT 21HINC SILOOP L6MOV DL,10MOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HLEA DX,STR2 ;输出字符串'PING JUN ZHI DE ER JIN ZHI CHUAN SHU CHU:’ MOV AH,9 INT 21HMOV CX,16MOV SI,0L7: RCL BX,1;将平均数转换为⼆进制串JNC L8ADD [STR1+SI],1;如果不为0就将其加1变成1的ASCII码值L8: MOV DL,[STR1+SI];将⼆进制串逐个输出MOV AH,2INT 21HINC SILOOP L7MOV AH,4CHINT 21H⼼得体会:本次实验编程⽐较复杂,在编这个程序之前⾃⼰先将前⾯三个练习编了⼀下,然后参考了书上的⼀个冒泡排序法的程序,之后才开始动⼿编该程序。

单片机与接口技术实验报告冒泡排序实验

单片机与接口技术实验报告冒泡排序实验

单片机与接口技术实验报告冒泡排序实验本实验旨在通过单片机的接口技术,实现冒泡排序算法的实践与理解。

通过实际操作,掌握单片机与接口技术的基本应用,理解冒泡排序算法原理,提升实践能力和编程技能。

冒泡排序是一种简单的排序算法,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。

走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

在单片机与接口技术的实验中,我们可以使用LED灯等外部设备来模拟冒泡排序的过程。

通过改变LED灯的亮灭状态,反映出排序过程中数据的交换结果。

确定单片机型号并连接硬件电路。

选择合适的单片机,如8051系列,并搭建相应的硬件电路。

主要包括电源、晶振、输入输出端口、LED灯等。

编写程序代码。

根据冒泡排序算法,编写适用于所选单片机的程序代码。

代码应该能够控制LED灯,根据排序结果改变其亮灭状态。

调试与运行程序。

将程序下载到单片机中,开启电源,观察LED灯的亮灭情况。

检查程序是否能够正确地实现冒泡排序。

记录与分析实验结果。

详细记录LED灯的亮灭状态,分析排序结果是否正确。

同时,对程序进行优化,提高排序效率。

经过实验,我们成功地在单片机上实现了冒泡排序算法。

观察LED灯的亮灭情况,我们可以看到排序过程中的数据交换过程。

通过对比理论结果与实际结果,我们发现二者基本一致,说明我们的程序正确地实现了冒泡排序。

在实验过程中,我们遇到了一些问题,如初始时端口设置不正确导致LED灯无法正常显示、数据交换过程中出现异常等。

针对这些问题,我们通过查阅资料和讨论,对程序进行了相应的修改和优化,最终解决了问题。

通过本实验,我们不仅加深了对冒泡排序算法的理解,还掌握了单片机与接口技术的应用。

同时,实验过程中的问题也锻炼了我们的解决问题的能力。

本实验还提高了我们的实践能力和编程技能,为后续的学习和实践打下了坚实的基础。

微机原理及接口技术实验——冒泡法

微机原理及接口技术实验——冒泡法

微机原理及接口技术实验——冒泡法冒泡排序是一种简单的排序算法,其基本思想是通过重复比较相邻的两个元素,并将较大的元素交换到右侧,从而将最大的元素逐渐"冒泡"到最右侧。

这种算法得名于每次比较时较大元素"冒泡"到右侧的过程。

冒泡排序算法的步骤如下:1.比较相邻的两个元素。

如果第一个元素大于第二个元素,则交换它们的位置。

2.对每一对相邻元素进行同样的操作,从左往右依次进行,这样一轮比较下来,最大的元素将会移动到最右侧。

3.重复上述步骤,每次比较的次数减1,直到所有元素都排好序。

下面是一个使用冒泡排序算法的示例程序:```pythondef bubble_sort(arr):n = len(arr)for i in range(n-1):for j in range(n-i-1):if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]arr = [64, 34, 25, 12, 22, 11, 90]bubble_sort(arr)print(arr)```在上述示例程序中,我们定义了一个名为`bubble_sort`的函数,该函数接受一个列表作为参数,并对列表进行冒泡排序。

在外层循环中,我们迭代n-1次,其中n为列表的长度。

在内层循环中,我们通过比较相邻元素并交换它们的位置,将较大的元素"冒泡"到右侧。

通过多次迭代,最终实现将所有元素按从小到大的顺序排列。

除了基本的冒泡排序算法,我们还可以对其进行一些改进,以提升排序的效率。

例如,我们可以设置一个标志位`flag`来记录本轮是否进行了元素的交换。

如果本轮没有进行交换,说明列表已经排好序,可以提前结束循环。

这样可以减少无意义的比较操作,提高效率。

冒泡排序算法的时间复杂度为O(n^2),其中n为列表的长度。

在最坏情况下,即列表本身为逆序,需要进行n*(n-1)/2次比较和交换操作。

微机原理实验报告冒泡法对数据排序

微机原理实验报告冒泡法对数据排序

实验内容:用“冒泡“法对一组数300,250,280,240,260,按从小到大的顺序排列。

实验要求:1、编制程序,对这组数进行排序,并输出原数据及排序后数据;2、利用DEBUG调试工具,用D0命令,查瞧排序前后,内存数据的变化;3、去掉最大与最小的两个值,求出其余值的平均值,并输出最大值,最小值与平均值;4、用学过的压栈PUSH与出栈POP指令,将平均值按位逐个输出(即输出263);5.将平均值263转化为二进制串,并将这组二进制串输出。

6、所有数据输出前要用字符串的输出指令,进行输出提示(如:zui da zhi shi : 300等),所有数据结果能清晰地显示在屏幕上。

程序代码:DATA SEGMENT ;定义数据段DT1 DW 300,250,280,240,260DT2 DB 'what five data input is',0DH,0AH,'$'DT3 DB 'what after rank is',0DH,0AH,'$'DT4 DB 'The max is',0DH,0AH,'$'DT5 DB 'The min is',0DH,0AH,'$'DT6 DB 'The average is',0DH,0AH,'$'DT7 DB 'show you the average one by one',0DH,0AH,'$'DT8 DB 'show you the average in binary form',0DH,0AH,'$'DT9 DB 0DH,0AH,'$'DT0 DB 'B',0DH,0AH,'$'N EQU 5DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA ;说明代码段、数据段STAT: MOV AX,DATAMOV DS,AXLEA DX,DT2 ;输出字符串MOV AH,09HINT 21HCALL ZIXU ;调用数据输出过程对数据进行排序:MOV CX,N-1 ;设置N-1轮比较次数MOV DX,1 ;比较轮次技术JM4:PUSH CXMOV CX,NSUB CX,DXLEA SI,DT1JM3:MOV AX,[SI]CMP AX,[SI+2]JLE JM2XCHG AX,[SI+2]XCHG AX,[SI]JM2:ADD SI,2LOOP JM3POP CXINC DXLOOP JM4输出排序后的顺序:LEA DX,DT3MOV AH,09HINT 21HCALL ZIXU输出最大值:LEA DX,DT4MOV AH,09HINT 21HLEA SI,DT1+8 ;排序后最后一个数就就是最大值MOV AX,[SI]CALL ZIXU1输出最小值:LEA DX,DT5MOV AH,09HINT 21HLEA SI,DT1 ;排序后第一个数就就是最小值MOV AX,[SI]CALL ZIXU1输出平均值:LEA DX,DT6MOV AH,09HLEA SI,DT1+2 ;去掉最大最小后的数求与MOV AX,[SI]ADD AX,[SI+2]ADD AX,[SI+4]MOV BX,3MOV DX,0DIV BX ;求其平均值MOV CX,AXCALL ZIXU1 ;调用输出程序输出把平均值分三位输出:LEA DX,DT7MOV AH,09HINT 21HMOV AX,CXMOV BX,100MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,AL ;输出平均值的第一位MOV AH,2INT 21HLEA DX,DT9 ;换行MOV AH,09HINT 21HPOP DXMOV AX,DXMOV BX,10MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,AL ;输出平均值的第二位MOV AH,2INT 21HLEA DX,DT9 ;换行MOV AH,09HPOP DXADD DX,30HMOV AH,2 ;输出平均值的第三位I NT 21HLEA DX,DT9MOV AH,09HINT 21H;以二进制位输出平均值LEA DX,DT8MOV AH,09HINT 21HMOV BX,CXMOV CX,16JM5:MOV DX,0SAL BX,1RCL DX,1ADD DX,30HMOV AH,02HINT 21H DEC CXJNZ JM5LEA DX,DT0MOV AH,09HINT 21HMOV AH,4CH ;返回DOSINT 21H;数据序列的输出写成一个过程:ZIXU PROCMOV CX,5LEA SI,DT1JM1:MOV AX,[SI]MOV BX,100MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,ALINT 21HPOP DXMOV AX,DXMOV BX,10MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,ALMOV AH,2INT 21HPOP DXADD DX,30HMOV AH,2INT 21HLEA DX,DT9MOV AH,09HINT 21HADD SI,2LOOP JM1RETZIXU ENDP;当个数据输出过程:ZIXU1 PROC ;将数据的输出写成一个过程MOV BX,100MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,ALMOV AH,2INT 21HPOP DXMOV AX,DXMOV BX,10MOV DX,0DIV BXADD AL,30HMOV DL,ALMOV AH,2INT 21HPOP DXADD DX,30HMOV AH,2INT 21HLEA DX,DT9MOV AH,09HINT 21HRETZIXU1 ENDPCODE ENDSEND STAT调试中出现的一些问题:1.输入时不慎将字母O当数字0输入,结果导致了下面第5行提示的错误。

微机原理 冒泡排序实验报告含源程序

微机原理 冒泡排序实验报告含源程序

实验报告实验名称_ _冒泡排序实验_课程名称____ __ __微机原理_____________院系部:控计学院专业班级:信安1101学生姓名:陈茹君学号:1111290106同组人:实验台号:18指导教师:闫江毓成绩:实验日期:2014年5月9日华北电力大学一、实验目的掌握用汇编语言编写气泡排序程序的思路和方法,掌握字符和数据的显示方法。

二、实验内容从键盘输入5个有符号2位十进制数,将它转换成有符号二进制数,将结果送入内存中buff开始的单元中。

将这些数从大到小排序,并将排序结果显示在屏幕上。

三、实验步骤1.算法设计1)问题分析键盘输入子程序inword 出口:buff开始的单元,CX排序子程序sort:入口:buff开始的单元,CX;出口:buff开始的单元,CX显示子程序display:入口:AL2)绘出流程图2.详细设计1)变量定义及说明.databuff db -5,-43,-32,-22,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,02)寄存器的使用及含义使用了al、ah、bl、bh、ax、bx、cx、di、si寄存器,都是用来存放数据,比较数据的大小,进行数据的值的转化和计算。

3)程序功能说明4)源程序清单.model small.data;buff db 20 dup(1)buff db -5,-43,-32,-22,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.codestart:mov ax, @datamov ds, axcall inwordcall sortcall displaymov ax, 4c00hint 21hinword procpush axpush bxpush cxpush dxpush simov si, offset buffmov cx, 5read:mov ah, 01hint 21hmov ah, 10xor bh, bhcmp al, 2dhmov bl, 1mov ah, 01hint 21h pos:add bh, alsub bh, 30hmov ah, 01hint 21hcmp al, 20hje donesub al, 30hxchg bh, almov ah, 10mul ahadd bh, 30hjmp pos done:cmp bl, 1jne finishneg bhmov bl, 0 finish:mov [si], bhinc siloop readpop sipop dxpop cxpop bxpop axretendpsort procpush axpush cxpush sipush dimov bx, 4 first:mov al, [si]mov cx, bxmov di, si second:inc dicmp al, [di]jge nextxchg al, [di]mov [si], al next:loop secondinc sidec bxjnz firstpop dipop sipop cxpop bxpop axretendp display procpush axpush bxpush cxpush dxpush simov dl, 0dhmov ah, 02hmov dl, 0ahmov ah, 02hint 21hmov cx, 5mov si, offset buffmov dh, 10dis:test [si], 10000000bjz positivemov dl, 2dhmov ah, 02hint 21hneg [si] positive:mov al, [si]xor ah, ahdiv dhmov dl, aladd dl, 30hmov bh, ahmov ah, 02hint 21hmov dl, bhadd dl, 30hmov ah, 02hint 21hmov dl, 20hmov ah, 02hint 21hinc siloop dispop sipop dxpop cxpop axretendpend start四、调试结果及调试分析五、结论与心得我们不仅要学习书本上的知识,更要知识与实践相结合,多动手发现问题解决问题,学会举一反三、融会贯通。

单片机与接口技术实验报告冒泡排序实验

单片机与接口技术实验报告冒泡排序实验

单片机与接口技术实验报告--冒泡排序实验单片机与接口技术实验报告--冒泡排序实验一、实验目的本实验旨在通过单片机实现冒泡排序算法,加深对单片机和接口技术的理解和实践操作能力,提高程序设计和调试的能力。

二、实验设备实验设备包括:单片机开发板、计算机、串口通信设备、LED指示灯等。

三、实验原理冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。

遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

四、实验步骤1、硬件连接:将单片机开发板与计算机通过串口通信设备连接,并连接LED指示灯。

2、编写程序:在计算机上使用单片机开发环境编写冒泡排序算法程序,并通过串口通信发送到单片机。

3、调试程序:在单片机上运行程序,观察LED指示灯的变化,对程序进行调试和修改。

4、测试结果:对不同的输入数据进行测试,观察LED指示灯的变化,验证程序的正确性。

五、实验结果通过本实验,我们成功地在单片机上实现了冒泡排序算法,并能够根据不同的输入数据进行正确的排序。

同时,通过LED指示灯的显示,我们可以直观地观察到排序的过程。

六、实验总结通过本次实验,我们深入了解了冒泡排序算法的原理和实现方法,同时也提高了对单片机和接口技术的理解和实践操作能力。

在实验过程中,我们遇到了一些问题,比如如何正确地连接硬件,如何编写和调试程序等,但在老师的指导下,我们都成功地解决了问题。

我们也意识到自己在某些方面还有不足,比如对单片机的了解还不够深入,对程序的调试能力还有待提高等。

在今后的学习和实践中,我们将更加努力,提高自己的能力和水平。

贵州大学微机原理实验三 -

贵州大学微机原理实验三 -

微机原理与接口技术实验报告学院:计算机科学与信息学院专业:网络工程班级:092 姓名高灿学号0908060383 实验组实验时间2011.11.8 指导教师肖敏成绩实验项目名称实验三汇编程序设计:循环实验目的 1.熟悉8088指令系统,掌握程序设计方法2.熟悉汇编语言编程,掌握串操作指令的使用实验原理在Debug环境下调试汇编程序实验内容1.编写并调试一个排序子程序,其方法为用冒泡法将RAM中的几个单元字节无符号的正整数,按从小到大的次序重新排列。

2.在4000H~400FH中查出有几个字节是零,把个数放在4100H中。

3.在附加段中有一数组,首地址为BUFF,数组中第一个字节存放了数组的长度。

编一个程序在数组中查找0,找到后把他从数组中删去,后续项向前压缩,其余项补0。

4.编程序统计学生的数学成绩,分别归类90~99分,80~89分,70~79分,60~69分及60分以下,并将各段的人数送入内存单元中。

实验环境Debug环境下实验步骤1、数据排序实验程序1)从第一个数开始,依次把相邻的两个数进行比较,即第(N-2)个数与第(N-1)个数比较,第(N-1)个数与第N个数比较等等;若第(N-1)个数不大于第N个数,则两者交换,否则不交换,直到N个数的相邻两个数都比较完为止。

此时。

N个数中的最小数将被排在N个数的最后。

2)对剩下的(N-1)个数重复第⑴步,找到(N-1)个数中的最小数。

3)重复第⑵步,直到N个数全部排序好为止。

4)在4000H~400AH中通过键盘命令输入不等的10个数,运行本实验程序后检查4000H~400AH中内容是否按从大到小排列。

在和PC机联机时,用连续单步方式,可很清楚地看出数据排序时数据移动变化情况。

实验结果STACK SEGMENT STACK 'STACK'TOP LABEL WORDSTACK ENDSCODE SEGMENTASSUME CS:CODE SS:STACK START: MOV AX, STACKMOV SS, AXMOV SP, OFFSET TOPMOV BX, 4000HMOV CX, 10INPUT: MOV AH, 1INT 21HMOV [BX], ALINC BXLOOP INPUTMOV CX, 9L1: MOV BX, 4000HPUSH CXL2: MOV AL , [BX]CMP AL, [BX+1]JA COUNTXCHG AL, [BX+1]MOV [BX], ALCOUNT: INC BXLOOP L2POP CXLOOP L1MOV AX, 4C00HINT 21HCODE ENDSEND START一、实验五数据排序实验:2、找“零”个数程序1)在4000H~400FH的几个单元中输入零,运行本程序后检查4100H中是几个单元数。

(完整word版)单片机实验一冒泡法排序

(完整word版)单片机实验一冒泡法排序

实验一:冒泡法排序实验一、实验要求实验目的:掌握控制转移指令的功能,以及冒泡法排序的原理。

实验要求:设30H开始的10个存储单元中,存放的是无符号数,编写程序实现:10个数排序,存放在50H开始的单元中。

二、实验原理多重循环即循环嵌套结构.多重循环程序的设计方法和单重循环是一样的,只是要分别考虑各重循环的控制条件.内循环属于外循环体重的具体处理部分。

在多重嵌套中,不允许各个循环体相互交叉,也不允许从外循环跳入内循环,否则编译时会出错.应该注意每次通过外循环进入内循环式,内循环的初始条件需要重置。

三、程序设计1、程序流程图图1 冒泡法程序流程图2、程序代码N EQU 10TAB EQU 30HORG 0000HMOV 30H, #1 ;在30H中输入10个随机数MOV 31H,#3MOV 32H,#2MOV 33H,#4MOV 34H,#6MOV 35H,#8MOV 36H,#7MOV 37H,#11MOV 38H,#9MOV 39H,#10SORT: MOV R4,#N-1LOOP1:MOV A,R4 ;冒泡法循环MOV R3, AMOV @R0,#TABLOOP2: MOV A,@R0MOV B, AINC R0MOV A, @R0CLR CMOV R2, ASUBB A, BJNC UNEXCHMOV A,R2UNEXCH:DJNZ R3,LOOP2 ;如果A〈B,顺序执行UNEXCH DJNZ R4, LOOP1LJMP SWITCHEXCH: DEC R0 ;如果A>B,则A,B调换位置XCH A,@R0INC R0MOV @R0, ASWITCH: MOV R0,#30HMOV R1,#50HMOV R2,#NPAIXU: MOV A,@R0 ;将30H中排好的数移动到50H中MOV @R1,AINC R0INC R1DEC R2CJNE R2, #0, PAIXUSJMP $END四、程序验证1、在30H中输入10个数,显示如下:图2 30H单元中存储的10个数2、对30H中的10个数排序,结果如下:图错误!未定义书签。

微机原理-实验一-汇编语言-冒泡排序

微机原理-实验一-汇编语言-冒泡排序

微机原理实验报告班级:XXXXX姓名:XXXX学号:20XXXXXXXXX大学信息科学与技术学院信息工程系实验一汇编语言程序设计-(具体题目)一、实验目的(根据实际情况修改):1、熟悉MASM编译环境,了解程序的汇编方法;2、熟悉常用汇编指令,学习汇编程序设计方法;3、学习汇编语言的调试过程,通过调试过程认识CPU执行程序的方式;4、了解冒泡法原理,学习多重循环的编程方法。

二、实验内容:编写程序,用冒泡法实现将数据段内9,8,7,6,5,4,3,2,1按照由小到大的顺序重新排列。

三、程序流程图和程序代码1、流程图2、代码与注释(代码不能和指导书完全一样,写出注释,写出寄存器尤其是DS的值)data segmentbuf1 db 8,7,6,5,4,3,2,1data endscode segmentassume cs:code,ds:datastart: mov ax,data //传送数据段datamov ds,axmov dx,7 //dx放外循环7次L3: mov cx,dx //cx放内循环7次lea si,buf1 //将db里的数据传送到siL2: mov al,[si]cmp al,[si+1] //比较[si]与[si+1]jb L1 //[si]<[si+1],跳转到L1xchg al,[si+1] //[si]>[si+1],两两交换mov [si],alL1: inc si //si减1loop L2 //循环L2dec dx //外循环减1,没减到0则跳转到L3 jnz L3 //入内循环,计数初值mov ah,4chint 21hcode endsend start四、调试过程及遇到的问题1、程序执行截图2、调试用到的命令-U命令:查看数据段地址;-d命令:查看运行前后存储器内容;-g命令:运行程序;-t命令:查看运行前后寄存器和存储器内容。

3、遇到的问题及解决办法问题:运行程序后,数据1在存储器地址末尾没变。

实验一 冒泡排序原理验证(1)

实验一 冒泡排序原理验证(1)

南京邮电大学通达学院实验报告实验名称: 冒泡排序原理验证课程名称:微型计算机原理与接口技术姓名班级学号: ________________________________________________实验时间:_____________________冒泡排序一、实验原理:经典排序算法- 冒泡排序Bubble sort原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子例子为从小到大排序,原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 |第一趟排序(外循环)第一次两两比较6 > 2交换(内循环)交换前状态| 6 | 2 | 4 | 1 | 5 | 9 |交换后状态| 2 | 6 | 4 | 1 | 5 | 9 |第二次两两比较,6 > 4交换交换前状态| 2 | 6 | 4 | 1 | 5 | 9 |交换后状态| 2 | 4 | 6 | 1 | 5 | 9 |第三次两两比较,6 > 1交换交换前状态| 2 | 4 | 6 | 1 | 5 | 9 |交换后状态| 2 | 4 | 1 | 6 | 5 | 9 |第四次两两比较,6 > 5交换交换前状态| 2 | 4 | 1 | 6 | 5 | 9 |交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |第五次两两比较,6 < 9不交换交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |第二趟排序(外循环)第一次两两比较2 < 4不交换交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |第二次两两比较,4 > 1交换交换前状态| 2 | 4 | 1 | 5 | 6 | 9 | 交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |第三次两两比较,4 < 5不交换交换前状态| 2 | 1 | 4 | 5 | 6 | 9 | 交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |第四次两两比较,5 < 6不交换交换前状态| 2 | 1 | 4 | 5 | 6 | 9 |交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |第三趟排序(外循环)第一次两两比较2 > 1交换交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |第二次两两比较,2 < 4不交换交换后状态| 1 | 2 | 4 | 5 | 6 | 9 | 交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |第三次两两比较,4 < 5不交换交换后状态| 1 | 2 | 4 | 5 | 6 | 9 | 交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |第四趟排序(外循环)无交换第五趟排序(外循环)无交换排序完毕,输出最终结果1 2 4 5 6 9二、实验代码#include<stdio.h>void main(){int a[7];int i,j,k;printf("输入7个数字\n");for(i=0;i<7;i++)scanf("%d",&a[i]);for(i=0;i<6;i++){for(j=0;j<6-i;j++)if(a[j]>a[j+1]){k=a[j];a[j]=a[j+1];a[j+1]=k;}printf("hen bubble sorting process:\n");for(k=0;k<7;k++)printf("%d ",a[k]);printf("\n");}printf("冒泡排序后:\n");for(i=0;i<7;i++)printf("%d",a[i]);printf("\n");}三、实验数据(给出实验结果)49 38 65 97 76 13 27四、实验总结(问题、解决方法、心得体会等)通过此次微型计算机原理与接口技术的冒泡排序的上机实验,巩固了冒泡排序的有关知识技能,增强了实践本领;而使用改进过的冒泡排序算法更能够反映其排序技巧的优先性,便利性;所使用的C语言代码篇幅较短,便于理解;总而言之,这一次的收获颇多,带来了更多学习的兴趣和动力;。

四川大学微机原理冒泡法排序实验报告

四川大学微机原理冒泡法排序实验报告

《微机原理与接口技术实验报告》学院:电气信息学院班级:电力老师:学号:姓名:目录1.实验目的 (1)2.实验内容 (1)3.程序流程图 (2)4.程序清单与注释 (4)5.运行结果 (10)6.实验心得 (11)一、实验目的:经过第一次试验,我们初次了解了DEBUG调试程序强大功能。

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

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

3.进一步熟悉DEBUG的调试命令。

二、实验内容:用冒泡的方法对一组数据元素排序,它的基本方法是:将相邻的两个元素通过比较进行排序,通过多次,多遍的邻元素排序,实现整个一组数的排序。

对于5(N)个元素,整个排序通过4遍(=N-1)邻元素排序完成。

每一遍的排序由若干次邻元素的排序组成。

4遍排序中,邻元素的排序依次为4,3,2,1遍。

完成第一遍排序后,最大数沉底,已经到达它应占据的位置,不需要参加下一遍的排序。

实验要求:1.编制程序,从键盘输入300,250,280,240,260这五个数,并思考如何输入任意五个数,五个数可以有一位数,二位数,三位数,四位数,五位数,混合输入比较大小;2.对这组数用冒泡法进行排序,并输出原始数据及排序后数据,两两数据之间用空格分隔;3.利用DEBUG调试工具,用D0命令,查看排序前后,内存数据的变化,以及会用调试命令查看程序运算中寄存器中的值;4.去掉最大和最小的两个值,求出其余值的平均值,并输出最大值,最小值和平均值;5.用压栈PUSH和出栈POP指令“先进后出”的特点,设计算法将平均值按位逐个输出(即输出263);6.用移位指令将平均值以二进制串的形式输出。

7.设计程序要有模块化的思想,用子程序实现不同的功能;8.所有数据输出前要用字符串的输出指令,进行输出提示(如:zui da zhi shi : 300等),所有数据结果能清晰地显示在电脑屏幕上。

三、程序流程图:1.主程序MAIN:2.冒泡排序子程序:SORT四、程序清单与注释:NAME BUBBLE_SORTDATA SEGMENTARRAY DW 5 DUP(?)COUNT DW 5TWO DW 2FLAG1 DW 0FLAG2 DB 0FAULT DW -1CR 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 ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATA,ES:DATASTART: PUSH DSAND AX,0PUSH AXMOV AX,DATAMOV DS,AXLEA DX,STR1MOV AH,09HINT 21HCALL CRLFREIN: CALL INPUTCMP AX,FAULTJE REINLEA DX,STR2MOV AH,09HINT 21HCALL OUTPUTCALL SORTLEA DX,STR3MOV AH,09HINT 21HCALL OUTPUTAND SI,0AND BX,0MOV BX,ARRAY[SI] LEA DX,STR4MOV AH,09HINT 21HCALL ONECALL CRLFLEA DX,STR5MOV AH,09HINT 21HMOV BX,ARRAY[SI+8] CALL ONECALL CRLFLEA DX,STR6MOV AH,09HINT 21HAND DX,0MOV AX,ARRAY[SI+2] ADD AX,ARRAY[SI+4] ADC AX,ARRAY[SI+6] MOV CX,COUNTDEC CXDEC CXDIV CXMOV BX,AXCALL ONECALL CRLFLEA DX,STR6MOV AH,09HMOV CX,16LL1: AND DX,0DIV TWOPUSH DXLOOP LL1MOV CX,16LL2: POP DXADD DL,30HMOV AH,2INT 21HLOOP LL2MOV AH,4CHINT 21HMAIN ENDPCRLF PROCLEA DX,CRMOV AH,09HINT 21HRETCRLF ENDPINPUT PROCMOV CX,COUNTAND SI,0NEXT1: CALL DTBDEC CXCMP DL,20HJE STOCMP DL,0DHJE EXIT2CALL CRLF ERROR: LEA DX,STR8 MOV AH,09HINT 21HCALL CRLFMOV AX,FAULTJMP EXIT3STO: MOV ARRAY[SI],BX ADD SI,2JMP NEXT1EXIT2: MOV ARRAY[SI],BX CALL CRLFEXIT3: RETINPUT ENDPDTB PROCAND BX,0AND FLAG1,0 CHAR: MOV AH,01HINT 21HMOV DL,ALCMP AL,2DHJNZ NEXT2MOV FLAG1,1JMP CHARNEXT2: SUB AL,30HJL NEXT3CMP AL,09HJG NEXT3CBWXCHG AX,BXMOV CX,10MUL CXXCHG AX,BXADD BX,AXJMP CHARNEXT3: CMP FLAG1,1JNZ EXIT1NEG BXEXIT1: RETDTB ENDPOUTPUT PROCCALL CRLFMOV DI,COUNTAND SI,0GO1: MOV BX,ARRAY[SI] TEST BX,8000HJZ GO2MOV DL,2DHMOV AH,02HINT 21HNEG BXGO2: CALL ONEMOV DL,2DHMOV AH,02HINT 21HADD SI,2DEC DIJNZ GO1CALL CRLFRETOUTPUT ENDPONE PROCPUSH BXPUSH CXPUSH SIPUSH DIMOV CX,10000 CALL BTDMOV CX,1000 CALL BTDMOV CX,100 CALL BTDMOV CX,10CALL BTDMOV CX,1CALL BTDADD DL,FLAG2 CMP DL,30H JNE QUIT3MOV AH,02H INT 21H QUIT3: POP DIPOP SIPOP CXPOP BXAND FLAG2,0 RETONE ENDPBTD PROCMOV AX,BXAND DX,0DIV CXMOV BX,DXMOV DL,ALADD DL,30H CMP FLAG2,0 JNE QUIT1CMP DL,30HJE QUIT2MOV FLAG2,1QUIT1: MOV AH,02HINT 21HQUIT2: RETBTD ENDPSORT PROCCLDMOV CX,COUNTDEC CXLOO1: MOV DI,CXAND SI,0LOO2: MOV AX,ARRAY[SI] CMP AX,ARRAY[SI+2] JL LOO3XCHG AX,ARRAY[SI+2] MOV ARRAY[SI],AX LOO3: ADD SI,2LOOP LOO2MOV CX,DILOOP LOO1RETSORT ENDPCODE ENDSEND START五、运行结果:1.对300、250、280、240、260五个数据进行冒泡排序,运行结果如下:2、对5802、129、30、7、1233五个数据进行冒泡排序,运行结果如下:3.对-1、23、189、-234、6五个数据进行冒泡排序,运行结果如下:4.当输入不合法时,显示如下:六、实验心得:在本次汇编语言程序设计实验中,我们运用了循环结构对冒泡排序进行了汇编设计。

微机原理实验报告冒泡法对数据排序之欧阳引擎创编

微机原理实验报告冒泡法对数据排序之欧阳引擎创编

实验内容:欧阳引擎(2021.01.01)用“冒泡“法对一组数300,250,280,240,260,按从小到大的顺序排列。

实验要求:1.编制程序,对这组数进行排序,并输出原数据及排序后数据;2.利用DEBUG调试工具,用D0命令,查看排序前后,内存数据的变化;3. 去掉最大和最小的两个值,求出其余值的平均值,并输出最大值,最小值和平均值;4. 用学过的压栈PUSH和出栈POP指令,将平均值按位逐个输出(即输出263);5.将平均值263转化为二进制串,并将这组二进制串输出。

6.所有数据输出前要用字符串的输出指令,进行输出提示(如:zui da zhi shi : 300等),所有数据结果能清晰地显示在屏幕上。

程序代码:DATA SEGMENT ;定义数据段DT1 DW 300,250,280,240,260DT2 DB 'what five data input is',0DH,0AH,'$'DT3 DB 'what after rank is',0DH,0AH,'$'DT4 DB 'The max is',0DH,0AH,'$'DT5 DB 'The min is',0DH,0AH,'$'DT6 DB 'The average is',0DH,0AH,'$'DT7 DB 'show you the average one by one',0DH,0AH,'$'DT8 DB 'show you the average in binary form',0DH,0AH,'$' DT9 DB 0DH,0AH,'$'DT0 DB 'B',0DH,0AH,'$'N EQU 5DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA;说明代码段、数据段STAT:MOV AX,DATAMOV DS,AXLEA DX,DT2;输出字符串MOV AH,09HINT 21HCALL ZIXU;调用数据输出过程对数据进行排序:MOV CX,N-1;设置N-1轮比较次数MOV DX,1;比较轮次技术JM4:PUSH CXMOV CX,NSUB CX,DXLEA SI,DT1JM3:MOV AX,[SI]CMP AX,[SI+2]JLE JM2XCHG AX,[SI+2]XCHG AX,[SI]JM2:ADD SI,2LOOP JM3POP CXINC DXLOOP JM4输出排序后的顺序:LEA DX,DT3MOV AH,09HINT 21HCALL ZIXU输出最大值:LEA DX,DT4MOV AH,09HINT 21HLEA SI,DT1+8;排序后最后一个数就是最大值MOV AX,[SI]CALL ZIXU1输出最小值:LEA DX,DT5MOV AH,09HINT 21HLEA SI,DT1;排序后第一个数就是最小值MOV AX,[SI]CALL ZIXU1输出平均值:LEA DX,DT6MOV AH,09HINT 21HLEA SI,DT1+2;去掉最大最小后的数求和MOV AX,[SI]ADD AX,[SI+2]ADD AX,[SI+4]MOV BX,3MOV DX,0DIV BX;求其平均值MOV CX,AXCALL ZIXU1;调用输出程序输出把平均值分三位输出:LEA DX,DT7MOV AH,09HINT 21HMOV AX,CXMOV BX,100MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,AL;输出平均值的第一位MOV AH,2INT 21HLEA DX,DT9;换行MOV AH,09HINT 21HPOP DXMOV AX,DXMOV BX,10MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,AL;输出平均值的第二位MOV AH,2INT 21HLEA DX,DT9;换行MOV AH,09HINT 21HPOP DXADD DX,30HMOV AH,2;输出平均值的第三位INT 21HLEA DX,DT9MOV AH,09HINT 21H;以二进制位输出平均值LEA DX,DT8MOV AH,09HINT 21HMOV BX,CXMOV CX,16JM5:MOV DX,0SAL BX,1RCL DX,1ADD DX,30HMOV AH,02HINT 21H DEC CXJNZ JM5LEA DX,DT0MOV AH,09HINT 21HMOV AH,4CH;返回DOSINT 21H;数据序列的输出写成一个过程:ZIXU PROCMOV CX,5LEA SI,DT1JM1:MOV AX,[SI]MOV BX,100MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,ALMOV AH,2INT 21HPOP DXMOV AX,DXMOV BX,10MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,ALMOV AH,2INT 21HPOP DXADD DX,30HMOV AH,2INT 21HLEA DX,DT9MOV AH,09HINT 21HADD SI,2LOOP JM1RETZIXU ENDP;当个数据输出过程:ZIXU1 PROC;将数据的输出写成一个过程MOV BX,100MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,ALMOV AH,2INT 21HPOP DXMOV AX,DXMOV BX,10MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,ALMOV AH,2INT 21HPOP DXADD DX,30HMOV AH,2INT 21HLEA DX,DT9MOV AH,09HINT 21HRETZIXU1 ENDPCODE ENDSEND STAT调试中出现的一些问题:1.输入时不慎将字母O当数字0输入,结果导致了下面第5行提示的错误。

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

一、实验内容用“冒泡“法对一组数300,250,280,240,260,按从小到大的顺序排列。

提示:用冒泡的方法对一组数据元素排序,它的基本方法是:将相邻的两个元素通过比较进行排序,通过多次,多遍的邻元素排序,实现整个一组数的排序。

对于5(N)个元素,整个排序通过4遍(=N-1)邻元素排序完成。

每一遍的排序由若干次邻元素的排序组成。

4遍排序中,邻元素的排序依次为4,3,2,1遍。

完成第一遍排序后,最大数沉底,已经到达它应占据的位置,不需要参加下一遍的排序。

外循环的次数为CX=4次(N-1),内循环的次数为4,3,2,1(DEC CX)实验要求:1.编制程序,对这组数进行排序,并输出原数据及排序后数据;2.利用DEBUG调试工具,用D0(是D零命令)命令,查看排序前后,内存数据的变化;3. 去掉最大和最小的两个值,求出其余值的平均值,并输出最大值,最小值和平均值;4. 用学过的压栈PUSH和出栈POP指令,将平均值按位逐个输出(即输出263);5将平均值263转化为二进制串,并将这组二进制串输出。

6.所有数据输出前要用字符串的输出指令,进行输出提示(如:zui da zhi shi : 300等),所有数据结果能清晰地显示在屏幕上。

二、程序清单及流程图冒泡法:DATA SEGMENT ;定义数据段VAR DW 300,250,280,240,260 ;定义待排序的量N EQU $-VAR ;占内存空间的大小,是次数的两倍;因为这是字定义EJ DW ? ;给平均值预留存储空间YSSJ DB 'yuan shi shu ju ji lu shi:$' ;原始数据的输出提示PXH DB 0DH,0AH,'pai xu hou de shu ju ji lu shi:$';排序后的输出; 提示MAXS DB 0DH,0AH,'zui da zhi shi:$';最大值输出提示MINS DB 0DH,0AH,'zui xiao zhi shi:$';最小值输出提示EQS DB 0DH,0AH,'ping jun zhi shi:$';平均值10进制输出提示EQE DB 0DH,0AH,'ping jun shu de er jin zhi dai ma shi:$';平均值;的二进制数制的输出提示DATA ENDS;定义堆栈段STACK SEGMENT PARA STACK 'STACK'STAPN DW 200 DUP (?)STACK ENDS;定义代码段CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK ;定义各代码段,数据段,堆栈段;初始化START: MOV AX,DATAMOV DS,AXMOV CX,N-2;原始数据显示MOV DX,OFFSET YSSJ ;显示‘原始数据的输出提示’的字符串,下同MOV AH,9 ;系统调用09H号功能,输出字符串INT 21HMOV CX,N ;输出原始数据循环初值MOV DX,10 ;DX的初始化MOV SI,0 ;变量的偏移量0,2,4,6,8XSX: MOV AX,VAR[SI] ;将变量依次取出,逐个显示CALL XSXH ;调用显示子程序ADD SI,2 ;改变变量的偏移量DEC CX ;改变CX,结束循环LOOP XSX;冒泡算法MOV CX,N-2WXH: PUSH CXMOV SI,0NXH: MOV AX,VAR[SI] ;暂存当前内存中的数据,一个字变量CMP AX,VAR[SI+2] ;与下一内存中的字变量比较JLE NXF ;如果前一字变量不大于后一字变量,不做交换,;直接修改偏移地址XCHG AX,VAR[SI+2] ;该项SI值并不改变XCHG AX,VAR[SI] ;交换,将较大值往后移NXF: ADD SI,2 ;改变偏移量,将所有数比较完DEC CX ;实现内层循环LOOP NXHPOP CX ;改变外层循环次数DEC CX ;外层循环次数递减LOOP WXH;排序后的数据显示(同原始数据显示)MOV DX,OFFSET PXH ;显示‘排序后数据的输出提示’的字符串MOV AH,9 ;字符串显示INT 21HMOV CX,NMOV DX,0MOV SI,0XSH: MOV AX,VAR[SI]CALL XSXH ;调用显示子程序ADD SI,2DEC CXLOOP XSH;最小值输出显示MOV DX,OFFSET MINSMOV AH,9INT 21HMOV SI,0MOV AX,VAR[SI] ;最小值是排序后该片内存中偏移量为0的数值CALL XSXH;最大值输出显示,最大值的偏移量与定义的类型及个数有关MOV DX,OFFSET MAXSMOV AH,9INT 21HMOV AX,VAR[SI+8] ;最大值是该片内存中偏移量最大为N-2的值CALL XSXH;求平均值MOV DX,0MOV CX,2 ;保存求和的个数,此处去掉最大最小值,个数为;N/2-2MOV SI,2 ;暂存求和起始偏移量,此处为2,不排最小值MOV AX,VAR[SI]QH: ADD SI,2ADD AX,VAR[SI]LOOP QH ;此循环用来求取排完序后的和MOV BX,3CWD ;扩展,求平均值,此处平均值大于255IDIV BX ;余数在DX,商在AXMOV EJ,AX ;将平均值(即商)写入内存,备用;使用PUSH,POP功能实现显示10进制的平均值MOV DX,OFFSET EQSMOV AH,9INT 21H ;输出相应提示字符串MOV AX,[EJ] ;将平均值写入寄存器,进行处理MOV BL,10 ;先取最低位IDIV BLMOV DL,AH ;余数在高位,给DX暂存PUSH DX ;最低位先压栈AND AX,00FFH ;将余数清0,保留商,再次取余IDIV BL ;此前为变BL值,再次取余,的次低位MOV DL,AH ;将余数给DL暂存PUSH DX ;次低位压栈MOV DL,AL ;此例仅3为,若有更高位,继续上述处理PUSH DX ;最高位压栈MOV CX,3 ;CX存十进制数的位数XHSC: POP DXADD DL,30HMOV AH,02HINT 21HLOOP XHSC ;依次弹出最高位,次高位,最低位,并逐一显示;将平均值转换为二进制显出MOV DX,OFFSET EQEMOV AH,9INT 21H ;输出相应提示字符串MOV BX,[EJ] ;将平均值写入BX寄存器进行处理MOV CX,16 ;循环次数,与定义的类型相关,一个字节8次XHYW: ROL BX,1 ;循环左移,依次取最低位MOV DL,BL ;数据暂存AND DL,01H ;取最低位,其余清0ADD DL,30HMOV AH,02HINT 21HLOOP XHYW ;依次显示各位;算法结束,回归系统MOV AH,4CHINT 21H; 显示子程序仅用于显示,此处不使用堆栈,XSXH PROCMOV BL,100 ;这里取最高位,数值100与位数有关,若有4位,则为1000IDIV BL ;除法,得余数和商MOV DX,AX ;高余低商,故将商给DX,取最高位,商只有一位PUSH DX ;保护DXADD DL,30HMOV AH,02HINT 21H ;显示最高位POP DXMOV AL,DHAND AX,00FFH ;将余数位清0,以免影响结果MOV BL,10IDIV BLMOV DX,AXPUSH DXADD DL,30HMOV AH,02HINT 21H ;显示次高位POP DXMOV DL,DHADD DL,30HMOV AH,02HINT 21H ;显示最低位,若有更高位与上述方法一致MOV DL,2CH ;AH此处未变INT 21HRETXSXH ENDPCODE ENDS ;代码段结束END START ;源程序结束流程图:三、运行结果yuan shi shu ju ji lu shi : 300,250,280,240,260,pai xu hou de shu ju ji lu shi: 240,250,260,280,300,zui xiao zhi shi: 240,zui da zhi shi: 300ping jun zhi shi: 263ping jun shu de er jin zhi dai ma shi: 0000000100000111编译:链接:运行结果:四、调试分析和体会用DO命令查看排序前后,内存数据的变化在此次编写程序的过程中,遇到问题主要是因为对冒泡法的不熟悉,在编写程序的过程中进度较慢,参照着书上的冒泡法,但是在之后遇到的问题便是在编译出错很多时,需要慢慢地借助DEBUG工具以及自己的检查来找出错误,这个过程比较艰难。

错误主要出现在:由于此次的程序较长,在进行跳转的时候弄错跳转的地方,而每次检查又比较的久,主要借助单步调试来进行检查。

此外在调用程序的过程中,对CALL指令的不熟悉,导致错用误用。

还有就是程序的逻辑性思维还是有些混乱,导致程序调试编写的过程比较艰难。

但最后还是在不断地DEBUG下,把冒泡的程序理解深入并编写调试成功。

自身体会:逻辑思维的训练不是一朝一夕的事情,每次都会因为逻辑思维的不清晰,而导致编写程序时有些混乱。

在冒泡法的程序中表现得尤为明显。

并且对于一些调用的指令还是不太熟悉,需要理论和实际一块加强。

另外在编写程序中,以后要养成在写完每一句在后边加注释的习惯,这样子,便会加强程序的可读性,不管是自己还是别人。

程序在编写运行的过程中,单步调试来进行检查是个很好的工具,就像老师所说的,如果让老师给检查错位,老师也一眼看不出来,也需要进行DEBUG来进行找错,而我们有这个工具,就要学会自己利用工具来找错误,既会让自己深刻理解程序,也可以锻炼自己的独立学习的能力。

相关文档
最新文档