单片机实验数据排序

单片机实验数据排序,第1张

原发布者:瀚海湛蓝

实验一、数据排序实验一、实验目的熟悉8031指令系统,掌握程序设计方法。二、实验内容编写并调试一个排序子程序,其功能为用冒泡法将内部RAM中几个单元字节无符号的正整数,按从小到大的次序重新排列。三、实验程序框图NNN四、实验步骤1把8032片内RAM区50H—5AH中放入不等的数据(用寄存器读写方法)。2用连续运行方式从起始地址0100H开始运行程序(输入0100后按EXEC键)。3排序结束,显示“P.”。4用寄存器读写方法检查50—5AH中内容应从小到大排列。五、参考程序DORDE:MOVSP,#60H设置栈指针MOVR3,#50HDORDE1:MOVA,R3MOVR0,A数据指针传送到R0MOVR7,#0AH长度送到R7CLR00H清零标志位MOVA,@R0DORDE2:INCR0MOVR2,ACLRC清零进位标志MOV22H,@R0CJNEA,22H,DORDE3是否相等SETBCDORDE3:MOVA,R2JCDORDE4小于或等于不交换SETB00HXCHA,@R0DECR0XCHA,@R0大于交换位置INCR0DORDE4:MOVA,@R0DJNZR7,DORDE2JB00H,DORDE1未完继续MOVR0,#7EH完,关显示器前三位MOVA,#0FFHMOVR4,#06HDORDE5:MOV@RO,ADECR0DJNZR4,DORDE5MOV7EH,#0CH

#include<stdio.h>

#include<stdlib.h>

#define N 8

void select_sort(int a[],int n)

//选择排序实现

void select_sort(int a[],int n)//n为数组a的元素个数

{

  //进行N-1轮选择

  for(int i=0i<n-1i++)

  {

      int min_index = i

      //找出第i小的数所在的位置

      for(int j=i+1j<nj++)

      {

          if(a[j] <a[min_index])

          {

              min_index = j

          }

      }

      //将第i小的数,放在第i个位置;如果刚好,就不用交换

      if( i != min_index)

      {

          int temp = a[i]

          a[i] = a[min_index]

          a[min_index] = temp

      }

  }

}

int  main()

{

  int num[10] = {8, 3, 11, 7, 9, 84, 19, 25,22,33}

  select_sort(num, 10)

  for(int i=0i<10i++)

      printf("%d  ", num[i])

  printf("\n")

  system("pause")

  return 0

}

用汇编语言实现排序,通常使用冒泡法。将数据段DATA开始的16个数排序,前小后大,程序示例如下:

DATAS SEGMENT

DATA DB 74,68,58,66,69,254,186,6,10,98,34,90,128,222,33,0

COUNT DB 10H

DATAS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,ES:DATAS

START:

MOV AX,DATAS

MOV DS,AX

MOV ES,AX

MOV BL,1 用BL来检验是否排序完成,减少循环次数

LOOP1:

CMP BL,0

JE CMPEND 若相等则跳转

XOR BL,BL 将BL清零

MOV CL,COUNT COUNT用于外层的计数

DEC CL CL减一,CL用于内层的计数

PUSH CX将CX压入堆栈

LEA DI,DATA将数据段首地址赋值给DI

LOOP2:

MOV AL,[DI]

CMP AL,[DI+1] 将前一个数与后一个数比较

JLE LOOP3 若前一个数小于或等于后一个数,则跳转到LOOP3

XCHG [DI+1],AL前者大于后者,则交换两数

MOV [DI],AL 如果前一个数字大于后一个数字,则交换

MOV BL,1

LOOP3:

INC DI指针加一

LOOP LOOP2循环L00P2,直到CX==0成立

POP CX将CX从堆栈中d出

MOV COUNT,CL 改变外层计数器的值

JMP LOOP1

CMPEND:

MOV AH,4CH 带返回码结束功能

INT 21H返回系统

CODES ENDS

END START


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11887898.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存