一、实验内容

在 buf 缓冲区中存放有 50 个字节数据(无符号数),编写程序将这些数据由小到大排序,排序后的数据仍放在该区域中。具体功能如下:
(1)原始数据在源程序中由定义给出;
(2)在屏幕上先显示排序前的数据(十六进制),数据以每行 10 个的格式显示在屏幕上,数据与数据间用空格分开;
(3)完成排序;
(4)在屏幕上显示排序后的数据(十六进制),数据以每行 10 个的格式显示在屏幕上,数据与数据间用空格分开;
如果数据个数变为 60 或 78 等的取值时,程序代码部分无需修改。

二、子程序调用图

三、算法思想

采用经典冒泡排序方法,重复扫描要排序的元素列,依次比较两个相邻的元素,完成元素列的升序或降序排列。设数据个数为n,总共需要排序n-1趟,第i趟排序做关键字两两比较的次数为n-i,所以整体运行总的平均时间复杂度为Q(n2)Q(n^{2})Q(n2)。

四、运行结果截图

  1. 在BUF缓冲区预置50个字节数据,排序结果如下:
  2. 在BUF缓冲区预置了78个字节数据,排序结果如下:

五、程序源码

DATA SEGMENT           INPUT1 DB  "Pre-sort data: ",'$'  INPUT2 DB  "Sorted data: ",'$' BUF DB "8D 89 1A 65 3C 01 34 6A 82 9F "DB "8C 49 29 35 3E 11 64 66 F2 FF " DB "ED 39 EA A5 CC 51 3D 6E 22 99 "DB "5D F9 BA 6B 39 08 B4 EA 82 6F "  DB "AD A9 AA 22 FC F1 ED EE 12 09 "DB "0D E9 0A 0B 49 28 24 2A A2 AF " DB "CD C9 CA DB D9 18 04 9A 82 8F "DB "64 8E 77 24 98 00 6A 12 ",'$'    ;BUF缓冲区中预置了78个字节数据LENGTH DW 0 NUM DW 0
DATA ENDS  CODE SEGMENTASSUME CS:CODE,DS:DATA
START:MOV AX,DATAMOV DS,AX CALL COUNT_STRING      ;计数BUF缓冲区存放数据的个数LEA DX, INPUT1         ;打印提示输出排序前数据   MOV AH, 09H                          INT 21H CALL LINE_BREAKCALL OUTPUT_DATA       ;输出排序前数据  CALL LINE_BREAKLEA DX, INPUT2         ;打印提示输出排序后数据   MOV AH, 09H                            INT 21H CALL LINE_BREAKCALL SORT_DATA         ;去排序CALL OUTPUT_DATA       ;输出排序后结果MOV AH,4CHINT 21H ;----------------子程序-----------------     ;-------------字符串计数器--------------
COUNT_STRING PROC    PUSH CXLEA SI,BUF               ;装载字符串指针MOV CX,0                 ;设置计数器初值
TST:CMP BYTE PTR[SI],'$'     ;比较 JE DONE                  ;字符串结束,转向DONE保存结果INC SI                   ;修改指针INC CX                   ;计数JMP TST                  ;转向TST,继续循环
DONE:MOV LENGTH,CX           ;保存字符串长度MOV AX,CX   MOV CX,3DIV CXMOV NUM,AX              ;保存数据个数    POP CXRET
COUNT_STRING ENDP
;---------------回车换行---------------
LINE_BREAK PROCMOV DL,0DH             ;显示回车符MOV AH,2INT 21HMOV DL,0AH             ;显示换行符MOV AH,2INT 21H      RET
LINE_BREAK ENDP
;------------循环输出数据------------
OUTPUT_DATA PROC  PUSH CXXOR BL,BLLEA SI,BUF     MOV CX,LENGTH
OUTPUT:MOV DL,[SI]           ;循环输出学生信息MOV AH,02HINT 21H INC SI INC BLCMP BL,30JNZ NEXT       CALL LINE_BREAK              XOR BL,BL
NEXT:  LOOP OUTPUTPOP CXRET
OUTPUT_DATA ENDP
;----------从小到大排序-----------
SORT_DATA PROC   PUSH AX  XOR AX,AX                    MOV CX,NUMSUB CX,1             ;冒泡排序总共要跑的趟数
SORT:   LEA SI,BUF     MOV DI,SI            ;找到第一个数据的第一位字符        PUSH CXINC AX MOV CX,NUMSUB CX,AX            ;每一趟排序中两两比较的次数
COUNT:                                                   MOV DX,2SUB DI,1 ADD DI,3
N:      DEC DX CMP DX,0  SUB DI,3ADD DI,1JE THENMOV BL,BYTE PTR[DI]  ;前一个数据ADD DI,3             ;后一个数据CMP BL,BYTE PTR[DI]  ;两个数据的对应位比较JE N JL THENCALL EXCHANGE        ;字符串交换
THEN:   SUB DI,1ADD DI,DX    LOOP COUNT POP CXLOOP SORTPOP AX  RET
SORT_DATA ENDP
;-----------排序字符串交换-----------
EXCHANGE PROC  PUSH DI     PUSH CX   MOV CX,2 SUB DI,4 ADD DI,DX
L2: MOV BH,BYTE PTR[DI]     ;前一个数据ADD DI,3 MOV BL,BYTE PTR[DI]     ;后一个数据MOV BYTE PTR[DI],BH SUB DI,3 MOV BYTE PTR[DI],BLINC DI                  ;数据的第二位LOOP L2 POP CX POP DIRET
EXCHANGE ENDP      CODE ENDS END START

emu8086——buf 缓冲区的字节数据排序算法程序相关推荐

  1. emu8086 数据排序

    对一串数据排序,按照ascii码大小排. 方法:冒泡法: 显示:INT 21,功能号9 ; You may customize this and other start-up templates;  ...

  2. Python StringIO实现内存缓冲区中读写数据

    StringIO的行为与file对象非常像,但它不是磁盘上文件,而是一个内存里的"文件",我们可以像操作磁盘文件那样来操作StringIO.这篇文章主要介绍了Python Stri ...

  3. Python StringIO模块 实现在内存缓冲区中读写数据

    StringIO的行为与file对象非常像,但它不是磁盘上文件,而是一个内存里的"文件",我们可以像操作磁盘文件那样来操作StringIO.这篇文章主要介绍了Python Stri ...

  4. [oracle] Oracle存储过程里操作BLOB的字节数据的办法,例如写入32位整数

    作者: zyl910 一.缘由 BLOB是指二进制大对象,也就是英文Binary Large Object的缩写. 在很多时候,我们是通过其他编程语言(如Java)访问BLOB的字节数据,进行字节级的 ...

  5. python读数据-Python如何读写字节数据

    问题 你想读写二进制文件,比如图片,声音文件等等. 解决方案 使用模式为 rb 或 wb 的 open() 函数来读取或写入二进制数据.比如: 1 2 3 4 5 6 7 # Read the ent ...

  6. 【Netty】NIO 缓冲区 ( Buffer ) ( 缓冲区读写类型 | 只读缓冲区 | 映射字节缓冲区 )

    文章目录 I . 缓冲区 ( Buffer ) 存取类型 II . 只读缓冲区 ( ReadOnlyBuffer ) III . 映射字节缓冲区 ( MappedByteBuffer ) I . 缓冲 ...

  7. 比世界纪录快3倍 阿里云377秒完成100TB数据排序

    本文讲的是 比世界纪录快3倍 阿里云377秒完成100TB数据排序,10月28日,Sort Benchmark在官方网站公布了2015年排序竞赛的最终成绩.阿里云用不到7分钟(377秒)就完成了100 ...

  8. 《Python Cookbook 3rd》笔记(5.4):读写字节数据

    读写字节数据 问题 你想读写二进制文件,比如图片,声音文件等等. 解法 使用模式为 rb 或 wb 的 open() 函数来读取或写入二进制数据.比如: # Read the entire file ...

  9. MapReduce程序之数据排序

    [toc] MapReduce程序之数据排序 需求 下面有三个文件: yeyonghao@yeyonghaodeMacBook-Pro:~/data/input/sort$ cat file1.csv ...

  10. 数据结构与算法 第八天常见排序+冒泡排序+快速排序+文件IO+大数据排序+文件合并

    数据结构与算法 第八天常见排序+冒泡排序+快速排序+文件IO+大数据排序+文件合并 第一章 冒泡排序 [1]Bubble_Sort.c 第二章 快速排序 [1]quick_sort.c 第三章 大数据 ...

最新文章

  1. pta 插入排序还是堆排序
  2. 如何在 Linux 中使用类似智能手机外观的 Conky 天气插件
  3. 创建oracle实例
  4. matlab 矩阵拼接
  5. linux 编译查看链接库详情,Linux环境下的编译,链接与库的使用
  6. Chrome查看cookie
  7. imac java7下载地址,如何在苹果电脑上安装JAVA开发工具,经验告诉你该这样
  8. 登录plsql 报错 the account is locked --用户被锁
  9. python利用Tesseract识别验证码
  10. git覆盖覆盖推送_强制“git Push”覆盖远程文件
  11. ChAMP包处理甲基化芯片数据
  12. bne 1b什么意思
  13. JNDI注入之略微学学
  14. OS + Linux Shell Command find
  15. 如何简单易懂的了解什么是区块链?
  16. 贾跃亭否认乐视IPO造假 为FF融资暂时不会回国
  17. niu-easy环境搭建
  18. 方直科技招聘测试经理和测试工程师(深圳)
  19. 【总结】1135- 图解虚拟 DOM 之 DIff 算法
  20. Python执行Curl命令

热门文章

  1. Android 的CompoundButton(抽象类按钮)、StringBuffer(字符串变量)
  2. Debian下安装万兆网卡驱动
  3. 通信工程专业英语词汇 通信工程 专业英语
  4. 3D模型欣赏:《Sword girl》古风 女战士角色 次世代 zbrush雕刻
  5. 关于搭建Hybrid App所需要的基础技术一文
  6. Jade模板引擎教程
  7. 秒杀项目(1)项目环境搭建
  8. 速达软件各版本及产品ID
  9. 在Ubuntu上使用MySQL设置远程数据库优化站点性能
  10. 如何基于 Spark Streaming 构建实时计算平台