单片机实验一 冒泡法排序
微机原理实验报告冒泡法对数据排序8页
![微机原理实验报告冒泡法对数据排序8页](https://img.taocdn.com/s3/m/341f10aa82d049649b6648d7c1c708a1284a0a6f.png)
微机原理实验报告冒泡法对数据排序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语言中的数组和循环结构等基本语言要素,完成了对数组中的数据进行排序
的操作。
通过本次实验,我们深入了解了算法的实际应用,掌握了编程语言的基本技巧,
对于今后的学习和实践具有重要的意义。
(整理)单片机冒泡排序.
![(整理)单片机冒泡排序.](https://img.taocdn.com/s3/m/aee12d29a8114431b80dd824.png)
课程名称:嵌入式系统基础实验项目:冒泡排序实验实验地点:专业班级:学号:学生姓名:指导教师: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)按输入顺序为混乱序列:五、实验数据记录和处理本实验采用输入为从小到大的顺序,从大到小的顺序,还有混乱排序三种输入方式。
(中断、冒泡排序、1602)单片机实验报告
![(中断、冒泡排序、1602)单片机实验报告](https://img.taocdn.com/s3/m/1438954977232f60ddcca16c.png)
本科生实验报告实验课程单片机实验学院名称信息科学与技术学院专业名称物联网工程学生姓名曹林鑫学生学号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、掌握单片机外部中断的原理及过程。
冒泡法排序实验报告
![冒泡法排序实验报告](https://img.taocdn.com/s3/m/f23227300b4c2e3f57276336.png)
冒泡法排序实验报告一、实验任务实现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;}四、实验结果。
冒泡法排序(共5张PPT)
![冒泡法排序(共5张PPT)](https://img.taocdn.com/s3/m/3179275b842458fb770bf78a6529647d27283493.png)
a(i + 1) = t a(i - 1) = t
If a(i) > a(i + 1) Then
(n-1) a(1)与a(2)比较,如果a(1)大,与a(2)交换。
t = a(i)
t = a(i)
方法2 (从后往前 小的数向前上升)
a(i) = a(i + 1) (n-1) a(1)与a(2)比较,如果a(1)大,与a(2)交换。
a(i - 1) = t
(n-1) a(n)与a(n-1)比较,如果a(n)小,与a(n-1)交换,反之,排序完成
Next i
Next j
方法2 (从后往前 小的数向前上升)
(1) 从第n个元素开始与前一个比较,如果比前一个小两元素交换, 依次比较到第1个元素,最终将最小的数换入第1个元素中,a(1)
方法2的核心代码
For j = 2 To 10 For i = 10 To j Step -1 If a(i) < a(i - 1) Then t = a(i) a(i) = a(i - 1) a(i - 1) = t End If Next i
Next j
(2) 重复(1) ,依次比较到第2个元素,最终将最小的数换入第2个元素中,a(2)不动
a(i + 1) = t For j = 10 To 2 Step -1
For i = 1 To j - 1
End If
End If (2) 重复(1) ,依次比较到第2个元素,最终将最小的数换入第2个元素中,a(2)不动
方法1 (从前往后 大的数向后下沉)
I…f a…(i)…<……a(…i …-…1)比…T较he…中n………………………比…较……中……………………
实验报告_冒泡排序法(3篇)
![实验报告_冒泡排序法(3篇)](https://img.taocdn.com/s3/m/ab79257b11a6f524ccbff121dd36a32d7375c7a6.png)
第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数据排序
![单片机实验1数据排序](https://img.taocdn.com/s3/m/d786a2da5022aaea998f0f39.png)
电子信息学院实验报告书课程名:《单片机原理及应用实验》题目:实验一数据排序实验软件实验实验类别:【设计】班级:学号:姓名:评语:(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。
单片机与接口技术实验报告--冒泡排序实验
![单片机与接口技术实验报告--冒泡排序实验](https://img.taocdn.com/s3/m/c1bbc2c22cc58bd63186bddf.png)
本科实验报告课程名称:单片机原理与接口技术实验项目:冒泡排序实验实验地点:跨越机房专业班级:学号:学生姓名:指导教师: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五、实验数据记录和处理单步执行观察发现,每一个数都会逐次与它之后的数进行比较,排序,直到所有数据都与其后的数据比较排完后才结束。
单片机原理实验报告
![单片机原理实验报告](https://img.taocdn.com/s3/m/4789e6aba417866fb94a8e86.png)
实验报告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单片机的中断组成、中断控制工作原理、中断处理过程、外部中断的中断触发方式,掌握中断功能的编程方法。
微机原理实验报告冒泡法对数据排序
![微机原理实验报告冒泡法对数据排序](https://img.taocdn.com/s3/m/615d5815b9d528ea81c779ad.png)
实验内容:用“冒泡“法对一组数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行提示的错误。
微机原理及接口技术实验——冒泡法
![微机原理及接口技术实验——冒泡法](https://img.taocdn.com/s3/m/cfe344613069a45177232f60ddccda38366be156.png)
微机原理及接口技术实验——冒泡法冒泡排序是一种简单的排序算法,其基本思想是通过重复比较相邻的两个元素,并将较大的元素交换到右侧,从而将最大的元素逐渐"冒泡"到最右侧。
这种算法得名于每次比较时较大元素"冒泡"到右侧的过程。
冒泡排序算法的步骤如下: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次比较和交换操作。
微机原理实验报告冒泡法对数据排序
![微机原理实验报告冒泡法对数据排序](https://img.taocdn.com/s3/m/8f154a89b7360b4c2f3f6472.png)
实验内容:用“冒泡“法对一组数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行提示的错误。
单片机与接口技术实验报告冒泡排序实验
![单片机与接口技术实验报告冒泡排序实验](https://img.taocdn.com/s3/m/f46fc41adc36a32d7375a417866fb84ae55cc35a.png)
单片机与接口技术实验报告--冒泡排序实验单片机与接口技术实验报告--冒泡排序实验一、实验目的本实验旨在通过单片机实现冒泡排序算法,加深对单片机和接口技术的理解和实践操作能力,提高程序设计和调试的能力。
二、实验设备实验设备包括:单片机开发板、计算机、串口通信设备、LED指示灯等。
三、实验原理冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
四、实验步骤1、硬件连接:将单片机开发板与计算机通过串口通信设备连接,并连接LED指示灯。
2、编写程序:在计算机上使用单片机开发环境编写冒泡排序算法程序,并通过串口通信发送到单片机。
3、调试程序:在单片机上运行程序,观察LED指示灯的变化,对程序进行调试和修改。
4、测试结果:对不同的输入数据进行测试,观察LED指示灯的变化,验证程序的正确性。
五、实验结果通过本实验,我们成功地在单片机上实现了冒泡排序算法,并能够根据不同的输入数据进行正确的排序。
同时,通过LED指示灯的显示,我们可以直观地观察到排序的过程。
六、实验总结通过本次实验,我们深入了解了冒泡排序算法的原理和实现方法,同时也提高了对单片机和接口技术的理解和实践操作能力。
在实验过程中,我们遇到了一些问题,比如如何正确地连接硬件,如何编写和调试程序等,但在老师的指导下,我们都成功地解决了问题。
我们也意识到自己在某些方面还有不足,比如对单片机的了解还不够深入,对程序的调试能力还有待提高等。
在今后的学习和实践中,我们将更加努力,提高自己的能力和水平。
单片机原理实验之循环程序实验——五个数的排序
![单片机原理实验之循环程序实验——五个数的排序](https://img.taocdn.com/s3/m/24b5be1c0b4e767f5bcfce06.png)
即完成直接选择排序。 2、冒泡排序 第一次:65 21 70 81 18
第二次:65 70 81 21 18
第三次:70 81 65 21 18
4
第四次: 81 70 65 21 18
即完成冒泡排序。
五.结论 本次实验完成了用选择排序法和冒泡排序法的五个数的排序,在排序完成时跳出程 序。灵活应用了比较、循环和跳转,将实验跟理论相结合,加深了对知识的理解。
1
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等) 基本要求源代码, 扩展要求关键代码
1、选择排序代码:
2\冒泡排序代码:
SORT: mov r7,#4 mov r0,#30h loop1: mov r6,7 mov a,@r0 mov r1,0 loop2: inc R1 mov b,@r1 cjne a,b,l1 sjmp l2 l1: jnc l2 mov a,b mov b,r1 mov r4,b l2: djnz r6,loop2 xch a,@r0 mov b,r4 mov r1,b mov @r1,a inc r0 mov b,r0 mov r4,b dJnz r7,loop1 sjmp $ end
计算机硬件实验室实验报告
课程名称:单片机原理与接口技术 姓 名 学 号 班 级 成 绩
设备名称及软件环境 实验名称
Windows XP 操作系统 Medwin 仿真器 实验日期
循环程序实验——五个数的排序
一. 实验内容 1.实现内存数据访问; 2.用直接选择排序和冒泡排序两种方法实现对五个字节从大到小的排序。 二. 理论分析或算法分析 本次实验中的五个数据放在以 30H 为首地址的 Data 里(30H~34H) ,将五个数据的从 大到小排序,其对应的地址为(30H~34H)里。 1、 选择排序: 每一趟在待排序的数据记录里出最大值的地址,然后将这个地址里的内容依次放在已 排序记录序列后面的地址里,同时将后面地址里内容放在原最大值的地址里,直至数据都 按此类排序。 如 23 45 56 12 35 第一次:56 [45 23 12 35] 第二次:56 45 [23 12 35] 第三次:56 45 35 [12 23] 第四次:56 45 35 23 12 2、 冒泡排序: 1)比较相邻的元素。如果第一个比第二个小,就交换他们两个。 2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最 后的元素应该会是最小的数。 3)针对所有的元素重复以上的步骤,除了最后一个。 4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 如: 07 19 06 21 65 第一次: [19 07 21 65] 06 第二次: [19 21 65] 07 06 第三次: [21 65] 19 07 06 第四次: 65 21 19 行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等) 初始化数据:21 65 18 70 81 1、直接选择排序 第一次:81 65 18 70 21
1仿真实验一_冒泡排序实验(用Keil完成)
![1仿真实验一_冒泡排序实验(用Keil完成)](https://img.taocdn.com/s3/m/7c779c88c77da26925c5b0ed.png)
仿真实验一 数据冒泡排序实验一、实验目的[1] 熟悉8051指令系统,掌握程序设计方法。
[2] 了解数据排序的简单算法。
[3] 掌握在Keil uVison下编制和调试内存程序的一般方法二、实验内容[1] 编写并调试一个排序程序,其功能为用冒泡法将内部RAM中,将连续多个单字节无符号的乱序整数,按从小到大的次序重新排列。
三、难点与重点[1] 冒泡排序的算法及实现代码;[2] Keil uVision 中对RAM数据的观察及程序跟踪、调试方法。
四、实验原理及方法有序的数列更有利于查找。
本程序用的是“冒泡排序”法在由低至高的地址空间内将数据由小到大排序,算法是将一个数与后面的数相比较,如果比后面的数大,则交换,如此将所有的数比较一遍后,最大的数就会在数列的最后面。
再进行下一轮比较,找出第二大数据,直到全部数据有序。
在Keil uVision中创建项目,编写程序,并进入调试模式,在内部RAM视图中查看60H~69H的数据内容,程序未执行前,应放入一组随机序列的数据,然后单步执行程序,观察中间执行步骤(留意相邻两个数之间的关系及交换情况),最后连续执行,完成后得到一个由小到大排列的结果,排序过程如图1所示。
图1 排序前后内部RAM的数据五、实验程序要求按下面给出的流程编制程序,实现将内部RAM 60H为首地址开始的10个单元的数据按升序排列排序。
七、思考题[1] 修改程序把存储区中内容按从大到小排列。
[2] 试分析下述C程序,并说明它与本实验的算法有什么不同?for(i=0;i<N-1;i++){ for(j=i+1;j<N;j++){if(a[i]<a[j])temp = a[i];a[i] = a[j];a[j] = temp;}}八、实验报告1. 实验的目的与任务。
2.说明实验原理、画出软件流程图。
3. 调试心得与体会。
4.回答思考题。
5.程序清单。
单片机上的数据排序
![单片机上的数据排序](https://img.taocdn.com/s3/m/263cacefaeaad1f346933ff4.png)
单片机上的数据处理(冒泡排序)一、实验目的1、熟悉89C51单片机系列指令系统;2、了解数据在单片机内的比较、交换过程;3、掌握使用汇编语言来实现数据冒泡排序并输出结果;二、实验内容以R0为学号,从R0里的地址单元开始输入10个不同的数;然后对10个数运用汇编语言使它们进行从小到大的排序。
三、实验步骤1、运行Keil C51软件,首先新建一个属于89C51的工程;然后新建一个文档并在文档中输入汇编程序,取一文件名且以ASM为后缀名来保存文件;2、对所保存的ASM文件进行编译,看是否有错,若有错则要认真修改直至编译后没有错误才可对没错的程序进行调试,在“DEBUG”菜单栏下,点击“start/stop debug session”,再点击“GO”进行跟踪。
3、打开内存显示框,观察数据在指定的内存单元中的变化。
4、程序清单:org 0000h ;程序开始地址mov 02h,#12h ;以自已学号为开始地址,随机生成10个数mov 03h,#15hmov 04h,#2hmov 05h,#8hmov 06h,#56hmov 07h,#51hmov 08h,#33hmov 09h,#21hmov 0Ah,#14hmov 0Bh,#22hclr 00h ;清交换标志位setb psw.3setb psw.4sub: mov r3,#9h ;10个数据循环次数mov r0,#02h ;数据存放区首址mov a,@r0 ;取前数L2: inc r0 ;取下一地址中的值mov r2,a ;保存前数subb a,@r0 ;相邻两数相减mov a,r2 ;恢复前数jc L1 ;顺序则继续比较setb 00h ;逆序则建立标志位xch a,@r0 ;前数与后数交换dec r0 ;长度减1xch a,@r0inc r0 ;仍指向后数单元L1: mov a,@r0djnz r3,L2 ;依次重复比较jb 00h,sub ;交换后重新比较retend5、实验结果(截取部分过程的结果):1)先输入值2)第一轮冒泡过程处理3、同理,可得出最终结果为:四、实验体会通过本次实验,使我对单片机89C51系列指令系统有了更深层次的了解,也学会了如何运用它们编写程序来对单片机内存单元的读写操作进行控制,对于在单片机内如何利用寄存器来进行数据比较与交换也有了更深层次的了解。
(完整word版)单片机实验一冒泡法排序
![(完整word版)单片机实验一冒泡法排序](https://img.taocdn.com/s3/m/a695e7ecde80d4d8d05a4fb6.png)
实验一:冒泡法排序实验一、实验要求实验目的:掌握控制转移指令的功能,以及冒泡法排序的原理。
实验要求:设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个数排序,结果如下:图错误!未定义书签。
51单片机设计冒泡程序实验总结
![51单片机设计冒泡程序实验总结](https://img.taocdn.com/s3/m/10465cf368dc5022aaea998fcc22bcd126ff42ae.png)
51单片机设计冒泡程序实验总结一、实验目的本实验的目的是通过使用51单片机设计冒泡排序算法程序,加深对冒泡排序算法的理解,同时掌握51单片机的编程和调试方法。
二、实验内容1.使用51单片机开发环境进行编程;2.设计冒泡排序算法程序,能够对一组包含10个整数的数组进行排序;3.在51单片机上进行调试和测试,观察排序结果是否正确。
三、实验原理冒泡排序是一种简单的排序算法,它通过相邻元素的比较和交换,逐步将最大(或最小)元素“冒泡”到数组的末尾(或开头)。
具体实现步骤如下:1.比较相邻的两个元素,如果前者大(或小)于后者,则交换它们的位置;2.对每一对相邻元素重复上述操作,从数组的第一个元素到倒数第二个元素,这样最后一个元素就被排到了正确的位置;3.针对剩下的元素再重复上述操作,直到整个数组排序完成。
四、实验步骤1.分析冒泡排序算法的代码实现步骤,编写51单片机汇编程序;2.使用51单片机开发环境进行编程,将汇编程序烧录到51单片机上;3.调试程序,观察排序结果是否正确;4.对程序进行优化和修改,以提高排序效率。
五、实验结果经过多次调试和修改,我们最终实现了冒泡排序算法的51单片机程序。
通过输入一组包含10个整数的数组,程序可以正确地对数组进行排序,并将排序结果在数码管上显示出来。
六、实验分析在进行实验过程中,我们发现冒泡排序算法虽然实现简单,但在处理大规模数据时效率较低。
冒泡排序的时间复杂度为O(n^2),因此在实际应用中,对于需要排序大量数据的情况,我们通常不会选择冒泡排序算法。
七、实验心得通过本次实验,我们深入理解了冒泡排序算法的实现原理,并掌握了使用51单片机进行编程和调试的方法。
同时,在实验中我们也了解到冒泡排序算法的局限性,这对我们今后选择合适的排序算法提供了一定的参考。
总之,本次实验不仅加深了我们对冒泡排序算法的理解,同时也培养了我们使用51单片机进行编程和调试的能力,为以后的学习和实践奠定了基础。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一:冒泡法排序实验
一、实验要求
实验目的:掌握控制转移指令的功能,以及冒泡法排序的原理。
实验要求:设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中的数据“丢失”问题还需进一步思考解决。