单片机实验一 冒泡法排序
- 格式:doc
- 大小:75.50 KB
- 文档页数:5
微机原理实验报告冒泡法对数据排序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语言中的数组和循环结构等基本语言要素,完成了对数组中的数据进行排序
的操作。
通过本次实验,我们深入了解了算法的实际应用,掌握了编程语言的基本技巧,
对于今后的学习和实践具有重要的意义。
课程名称:嵌入式系统基础实验项目:冒泡排序实验实验地点:专业班级:学号:学生姓名:指导教师:2012年 3 月日一、实验目的和要求1、实验目的(1)熟悉MCS-51指令系统,掌握程序设计方法(2)掌握排序程序算法(3)掌握用循环程序实现数据排列的基本方法2、实验要求(1)根据试验任务要求,编制C51源程序(2)上机调试程序,记录相关调制信息(3)写出实验报告二、实验内容和原理1、实验内容编写并调试一个通用排序子程序,其功能为将RAM 的40H ~4FH 单元16个字符无符号二进制整数按从小到大顺序排列,将排序后数据存储于RAM 的50H ~5FH 单元中。
2、实验原理从40H 单元的第一个开始依次和相邻单元的另一个数比较,如果顺序对,则不作任何操作;如果顺序不对,则将这两个数交换位置。
这样在完成第一遍1-n 次比较后,最大的数到了最后,所以第二遍比较只需要比较2-n 次,最多作1-n 遍比较就可完成排序。
在比较中设立一个标志位flag ,每次进入外循环时把flag 清零,在内循环结束时若flag=1说明排序未完成,进入外循环;若flag=0,说明排序完成,程序结束。
三、主要仪器设备计算机一台操作系统:Windows98/2000/XP应用软件:W AVE6000四、操作方法与实验步骤org 0000hmov r7,#10hmov r0,#40hmov r1,#20hstart: mov a,r1mov @r0,ainc r0DEC r1djnz r7,startmov r7 ,0FHLP0: MOV R0,#40HMOV A,R7MOV R6,#2HCLR 7FHLP1: MOV A,@R0MOV 20H,@R0INC R0MOV 21H ,@R0CLR CSUBB A,21HJC LP2SETB 7FHMOV @R0,20HDEC R0MOV @R0,21HINC R0LP2: DJNZ R6,LP1JNB 7FH,LP3MOV R7,#2HDJNZ R7,LP0LP3: MOV R7,#10HMOV R0,#40HMOV R1,#50HLP4: MOV A,@R0MOV @R1,AINC R0INC R1DJNZ R7,LP4MOV 60H,R0MOV 80H,R1SJMP $END(1)按输入顺序从小到大的序列:(2)按输入顺序为从大到小的序列:(3)按输入顺序为混乱序列:五、实验数据记录和处理本实验采用输入为从小到大的顺序,从大到小的顺序,还有混乱排序三种输入方式。
本科生实验报告实验课程单片机实验学院名称信息科学与技术学院专业名称物联网工程学生姓名曹林鑫学生学号201413060301指导教师谢兴红实验地点6B607实验成绩二〇一六年九月二〇一六年十二月实验一冒泡排序(汇编)一.实验目的掌握单片机的汇编语言排序程序。
二.实验内容将单片机内部的数据进行排序,且使用汇编语言。
三.实验要求根据实验内容编写一个程序,数据排列顺序要求是从小到大。
四.实验说明先在片内RAM中存储一组数据,重复地走访过要排序的数据,一次比较两块内存上的数据,如果他们的顺序错误就把他们交换过来。
走访数据的工作是重复地进行直到没有再需要交换,也就是说该列数据已经排序完成。
五.算法分析若文件的初始状态是正序的,一趟扫描即可完成排序。
所需的关键字比较次数C和记录移动次数M均达到最小值:,。
所以,冒泡排序最好的时间复杂度为O(n)。
若初始文件是反序的,需要进行n-1 趟排序。
每趟排序要进行n-i次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。
在这种情况下,比较和移动次数均达到最大值:冒泡排序的最坏时间复杂度为。
综上,因此冒泡排序总的平均时间复杂度为。
六.实验程序及分析ORG 0000HLJMP mainORG 0100Hmain:MOV 40H,#05H//在40H-44H中随机存放五个立即数MOV 41H,#08HMOV 42H,#09HMOV 43H,#07HMOV 44H,#06HMOV R7,#04H//控制比较循环的次数MOV R6,#04HLOOP3:MOV R0,#40H//指向需要进行比较的数据的地址MOV R1,#41H//MOV A,R6MOV R7,ACLR ALOOP1:CLR CMOV A,@R1MOV 49H,A //交换数据前的备份SUBB A,@R0//用进位标志判断两数的大小JC LOOPLJMP LOOP4LOOP:MOV A, @R0//恢复交换前的备份数据MOV @R1,AMOV @R0,49HLOOP4:INC R0INC R1DJNZ R7,LOOP1//控制比较的次数DJNZ R6,LOOP3//控制比较的轮数LJMP $END六、实验截图排序前内存中的数据排序后内存的数据实验二外部中断一.实验目的1、掌握单片机外部中断的原理及过程。
冒泡法排序实验报告一、实验任务实现N个16位无符号整数的排序,核心程序使用汇编语言实现。
二、程序算法冒泡法:若有n个数需要排序,则第一次遍历n个数,将x[0]与x[1]相比,若x[0]>x[1],则两数交换位置,若x[0]<x[1],则不作任何调整;然后将x[0]与x[2]相比较,若x[0]>x[2],则两数交换位置;若x[0]<x[2],则不作任何调整;依此类推,直到x[0]与x[n]比较完毕为止。
接着第二次遍历n-1个数,将x[1]与x[2]相比,若x[1]>x[2],则两数交换位置,若x[0]<x[1],则不作任何调整;一直到x[1]与x[n]比较完毕为止。
最后一直到只需要遍历2个数,比较调整完毕就可以得到数组从小到大的排列次序,算法在每次遍历时使最小的数象气泡一样冒到顶端,在经历n-1次遍历以后即可得到结果。
三、源程序及注释//冒泡排序法#include <iostream.h>int main(int argc, char* argv[]){unsigned short int x[33]; //排序个数上限为33个unsigned short int i,j,n;unsigned short int a,b;//提示输入排序个数cout<<"Please input the count of numbers: \n";cin>>n;//提示输入需要排序的各个数cout<<"Please input the numbers: \n";x[0] = 0;for(i=1;i<n+1;i++) //初始化需要排序的数组x[n]cin>>x[i];for(i=0;i<=n;i++) //冒泡法排序{for(j=n;j>=i+1;j--) //每次遍历n-i个数{a = x[j-1];b = x[j];_asm{mov ax,a //将一个数读入到axcmp ax,b //比较两数大小jc exit //若a小则跳出xchg ax,b //若b小则两数交换次序mov a,axexit: NOP}x[j-1] = a; //保存两数排序结果x[j] = b;}}//输出排序结果,按从小到大排列cout<<"The Result is : \n";for(i=1;i<n+1;i++)cout<<x[i]<<' ';cout<<'\n';return 0;}四、实验结果。
第1篇一、实验目的1. 理解冒泡排序算法的基本原理和操作步骤。
2. 掌握冒泡排序算法的实现方法。
3. 分析冒泡排序算法的时间复杂度和空间复杂度。
4. 通过实验验证冒泡排序算法的效率。
二、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发环境:Visual Studio 2019三、实验原理冒泡排序是一种简单的排序算法,其基本思想是通过多次比较和交换相邻元素,将待排序的序列变为有序序列。
冒泡排序算法的基本步骤如下:1. 从第一个元素开始,相邻的两个元素进行比较,如果它们的顺序错误(即第一个元素大于第二个元素),则交换它们的位置。
2. 重复步骤1,对相邻的元素进行比较和交换,直到整个序列的最后一个元素。
3. 第一轮排序完成后,最大的元素被放置在序列的最后一个位置。
4. 从第一个元素开始,对剩余的元素重复步骤1和步骤2,直到序列的倒数第二个元素。
5. 重复步骤3和步骤4,直到整个序列有序。
四、实验步骤1. 编写冒泡排序算法的C++代码,实现上述算法步骤。
2. 在主函数中创建一个待排序的数组。
3. 调用冒泡排序函数对数组进行排序。
4. 输出排序前后的数组,验证排序结果。
五、实验代码```cppinclude <iostream>using namespace std;// 冒泡排序函数void bubbleSort(int arr[], int n) {for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) {// 交换相邻元素int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}// 打印数组函数void printArray(int arr[], int n) {for (int i = 0; i < n; i++) {cout << arr[i] << " ";}cout << endl;}int main() {// 创建待排序的数组int arr[] = {64, 34, 25, 12, 22, 11, 90};int n = sizeof(arr) / sizeof(arr[0]);// 打印排序前的数组cout << "排序前的数组:\n";printArray(arr, n);// 调用冒泡排序函数bubbleSort(arr, n);// 打印排序后的数组cout << "排序后的数组:\n";printArray(arr, n);return 0;}```六、实验结果与分析1. 运行实验程序,输出排序前后的数组,验证排序结果是否正确。
电子信息学院实验报告书课程名:《单片机原理及应用实验》题目:实验一数据排序实验软件实验实验类别:【设计】班级:学号:姓名:评语:(1)电路连接调试:□正确□基本正确□不正确(2)实验程序编写:□正确□基本正确□不正确(3)数据测量分析:□准确□基本准确□不准确成绩:□A □B □C □D ,指导教师:批阅时间:年月日1、实验内容或题目题目:数据排序实验实验内容:用冒泡法将内存RAM中几个单字节无符号的正整数,按从小到大的次序重新排列。
2、实验目的与要求实验目的:(1)熟悉51指令系统,掌握程序设计方法;(2)掌握汇编语言设计和调试方法实验要求:将RAM 50H~5AH 中放入不等的数据,编写并调试一个排序子程序,按从小到大的次序重新排列。
3、实验仪器(1)DJ-598K三合一单片机微机试验仪1块(2)PC微机1台4、实验程序框图(供参考)6、实验程序(实验程序清单作为附件放在最后)7、实验步骤将RAM 50H~5AH 中放入不等的数据,运行实验程序后检查50H~5AH中的内容是否按从小到大的次序排列。
8、实验数据RAM 50H~5A中依次放置如下数据:55,66,AA,44,77,22,88,00,33,55,99;程序运行后RAM 50H~5A中的数据依次为:9、思考题本题中,如何修改程序把50H~5AH中内容从大到小排列?答:ORG 0000HMOV DPTR,#2000HMOVX A,@DPTRMOV B,ASWAP AANL A,#0FHINC DPTRMOVX @DPTR,ANC DPTRMOV A,BANL A,#0FHMOVX @DPTR,ASJMP $END<附件> 实验程序清单ORG 0000HLJMP QUEORG 09B0HQUE: MOV R3,#50HQUE1: MOV A,R3MOV R0,AMOV R7,#0AHCLR 00HMOV A,@R0QL2: INC R0MOV R2,ACLR CMOV 22H,@R0CJNE A,22H,QL3 SETB CQL3: MOV A,R2JC QL1SETB 00HXCH A,@R0INC R0QL1: MOV A,@R0DJN2 R7,QL2JB 00H,QUE1 LOOP: SJMP LOOPEND。
本科实验报告课程名称:单片机原理与接口技术实验项目:冒泡排序实验实验地点:跨越机房专业班级:学号:学生姓名:指导教师: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五、实验数据记录和处理单步执行观察发现,每一个数都会逐次与它之后的数进行比较,排序,直到所有数据都与其后的数据比较排完后才结束。
实验报告01_排序程序实验目的1. 熟悉MCS-51指令系统,掌握程序设计方法。
2. 掌握控制转移指令的功能,以及冒泡排序法原理。
3. 熟悉51单片机汇编语言编程环境。
实验要求设30H开始的10个存储单元中,存放的是无符号数,编写程序实现:将它们排序,并存放到50H开始的单元中。
实验原理冒泡算法的思想为,每次取相邻单元的两个数比较,判断是否需要交换数据的位置。
第一次循环,比较N-1次,取到数据表的最大值;第二次循环,比较N-2次,取到次大值;……第N-1次循环,比较一次,排序结束。
流程框图实验程序及调试仿真:实验程序如下:N EQU 10TAB EQU 30HTAC EQU 50HORG 0000H SORT: MOV R4,#N-1 LOOP1: MOV A,R4MOV R3,AMOV R0,#TAB LOOP2: MOV A,@R0MOV B,AINC R0MOV A,@R0CLR CSUBB A,BJNC UNEXCHMOV A,@R0DEC R0XCH A,@R0INC R0MOV @R0,A UNEXCH: DJNZ R3,LOOP2DJNZ R4,LOOP1MOV R1,#TABMOV R7,#NMOV R0,#TAC AGAIN: MOV A,@R1MOV @R0,AINC R1INC R0DJNZ R7,AGAINSJMP $END程序调试及运行结果实验结论通过本实验,我对冒泡排序法的原理有了更深入的理解,同时在掌握此算法思想的基础上能够用汇编语言进行编程,并学会在Keil μVersion4调试界面的Memory窗口中查看内存地址的内容,从而验证设计的源程序的正确性,提高了自己解决问题的能力。
实验报告02_ 外部中断实验实验目的学会使用Keil μVersion4和Proteus软件进行单片机汇编语言和C语言程序设计与开发;了解和掌握MCS-51单片机的中断组成、中断控制工作原理、中断处理过程、外部中断的中断触发方式,掌握中断功能的编程方法。
实验内容:用“冒泡“法对一组数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 ;去掉最大最小后的数求和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 ;输出平均值的第一位INT 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 ;输出平均值的第三位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 21HDEC CXLEA 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,2POP DX MOV AX,DX MOV BX,10 MOV DX,0 DIV BX PUSH DX ADD AL,30H MOV DL,AL MOV AH,2 INT 21H POP DX ADD DX,30H MOV AH,2 INT 21H LEA DX,DT9 MOV AH,09H INT 21H ADD SI,2RETZIXU 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行提示的错误。
实验一:冒泡法排序实验
一、实验要求
实验目的:掌握控制转移指令的功能,以及冒泡法排序的原理。
实验要求:设30H开始的10个存储单元中,存放的是无符号数,编写程序实现:10个数排序,存放在50H开始的单元中。
二、实验原理
多重循环即循环嵌套结构。
多重循环程序的设计方法和单重循环是一样的,只是要分别考虑各重循环的控制条件。
内循环属于外循环体重的具体处理部分。
在多重嵌套中,不允许各个循环体相互交叉,也不允许从外循环跳入内循环,否则编译时会出错。
应该注意每次通过外循环进入内循环式,内循环的初始条件需要重置。
三、程序设计
1、程序流程图
图 1 冒泡法程序流程图2、程序代码
N EQU 10
TAB EQU 30H
ORG 0000H
MOV 30H, #1 ;在30H中输入10个随机数
MOV 31H, #3
MOV 32H, #2
MOV 33H, #4
MOV 34H, #6
MOV 35H, #8
MOV 36H, #7
MOV 37H, #11
MOV 38H, #9
MOV 39H, #10
SORT: MOV R4, #N-1
LOOP1: MOV A,R4 ;冒泡法循环
MOV R3, A
MOV @R0, #TAB
LOOP2: MOV A, @R0
MOV B, A
INC R0
MOV A, @R0
CLR C
MOV R2, A
SUBB A, B
JNC UNEXCH
MOV A, R2
UNEXCH: DJNZ R3, LOOP2 ;如果A<B,顺序执行UNEXCH DJNZ R4, LOOP1
LJMP SWITCH
EXCH: DEC R0 ;如果A>B,则A,B调换位置
XCH A, @R0
INC R0
MOV @R0, A
SWITCH: MOV R0, #30H
MOV R1, #50H
MOV R2, #N
PAIXU: MOV A, @R0 ;将30H中排好的数移动到50H中
MOV @R1, A
INC R0
INC R1
DEC R2
CJNE R2, #0, PAIXU
SJMP $
END
四、程序验证
1、在30H中输入10个数,显示如下:
图 2 30H单元中存储的10个数
2、对30H中的10个数排序,结果如下:
图 3 对30H中10个数排序后的结果
3、将30H中的数转移到50H中,结果如下:
图 4 30H中10个数转移到50H之后的结果
结论:程序基本符合实验要求。
但第10个数会“丢失”。
因为按Loop1、Loop2循循环,第10个数(39H)要跟第11个数(40H)交换,而(40H)=00。
故39H中的数会“丢失”。
五、实验总结
1、本实验用汇编语言写冒泡法程序,算法基本思路与C语言的冒泡法程序相似,可参照C语言程序编写汇编语言程序。
2、先画算法流程图再写程序有助于理清思路。
3、本实验汇编程序参考了课本P 的冒泡法例程。
但书上的程序Loop2处有错误:
书上的算法是:
SUBB A, B
JNC UNEXH
此时A=(A)-(B)-(cy),存储器A中的值已经改变,不再是30H中的某个数。
下面算法
EXCH中交换A、B的值得到的结果必然是错误的。
应在比较完A、B的值后,把A还原到比较前的值。
4、算法中39H中的数据“丢失”问题还需进一步思考解决。