emu8086——buf 缓冲区的字节数据排序算法程序
一、实验内容
在 buf 缓冲区中存放有 50 个字节数据(无符号数),编写程序将这些数据由小到大排序,排序后的数据仍放在该区域中。具体功能如下:
(1)原始数据在源程序中由定义给出;
(2)在屏幕上先显示排序前的数据(十六进制),数据以每行 10 个的格式显示在屏幕上,数据与数据间用空格分开;
(3)完成排序;
(4)在屏幕上显示排序后的数据(十六进制),数据以每行 10 个的格式显示在屏幕上,数据与数据间用空格分开;
如果数据个数变为 60 或 78 等的取值时,程序代码部分无需修改。
二、子程序调用图
三、算法思想
采用经典冒泡排序方法,重复扫描要排序的元素列,依次比较两个相邻的元素,完成元素列的升序或降序排列。设数据个数为n,总共需要排序n-1趟,第i趟排序做关键字两两比较的次数为n-i,所以整体运行总的平均时间复杂度为Q(n2)Q(n^{2})Q(n2)。
四、运行结果截图
- 在BUF缓冲区预置50个字节数据,排序结果如下:
- 在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 缓冲区的字节数据排序算法程序相关推荐
- emu8086 数据排序
对一串数据排序,按照ascii码大小排. 方法:冒泡法: 显示:INT 21,功能号9 ; You may customize this and other start-up templates; ...
- Python StringIO实现内存缓冲区中读写数据
StringIO的行为与file对象非常像,但它不是磁盘上文件,而是一个内存里的"文件",我们可以像操作磁盘文件那样来操作StringIO.这篇文章主要介绍了Python Stri ...
- Python StringIO模块 实现在内存缓冲区中读写数据
StringIO的行为与file对象非常像,但它不是磁盘上文件,而是一个内存里的"文件",我们可以像操作磁盘文件那样来操作StringIO.这篇文章主要介绍了Python Stri ...
- [oracle] Oracle存储过程里操作BLOB的字节数据的办法,例如写入32位整数
作者: zyl910 一.缘由 BLOB是指二进制大对象,也就是英文Binary Large Object的缩写. 在很多时候,我们是通过其他编程语言(如Java)访问BLOB的字节数据,进行字节级的 ...
- python读数据-Python如何读写字节数据
问题 你想读写二进制文件,比如图片,声音文件等等. 解决方案 使用模式为 rb 或 wb 的 open() 函数来读取或写入二进制数据.比如: 1 2 3 4 5 6 7 # Read the ent ...
- 【Netty】NIO 缓冲区 ( Buffer ) ( 缓冲区读写类型 | 只读缓冲区 | 映射字节缓冲区 )
文章目录 I . 缓冲区 ( Buffer ) 存取类型 II . 只读缓冲区 ( ReadOnlyBuffer ) III . 映射字节缓冲区 ( MappedByteBuffer ) I . 缓冲 ...
- 比世界纪录快3倍 阿里云377秒完成100TB数据排序
本文讲的是 比世界纪录快3倍 阿里云377秒完成100TB数据排序,10月28日,Sort Benchmark在官方网站公布了2015年排序竞赛的最终成绩.阿里云用不到7分钟(377秒)就完成了100 ...
- 《Python Cookbook 3rd》笔记(5.4):读写字节数据
读写字节数据 问题 你想读写二进制文件,比如图片,声音文件等等. 解法 使用模式为 rb 或 wb 的 open() 函数来读取或写入二进制数据.比如: # Read the entire file ...
- MapReduce程序之数据排序
[toc] MapReduce程序之数据排序 需求 下面有三个文件: yeyonghao@yeyonghaodeMacBook-Pro:~/data/input/sort$ cat file1.csv ...
- 数据结构与算法 第八天常见排序+冒泡排序+快速排序+文件IO+大数据排序+文件合并
数据结构与算法 第八天常见排序+冒泡排序+快速排序+文件IO+大数据排序+文件合并 第一章 冒泡排序 [1]Bubble_Sort.c 第二章 快速排序 [1]quick_sort.c 第三章 大数据 ...
最新文章
- pta 插入排序还是堆排序
- 如何在 Linux 中使用类似智能手机外观的 Conky 天气插件
- 创建oracle实例
- matlab 矩阵拼接
- linux 编译查看链接库详情,Linux环境下的编译,链接与库的使用
- Chrome查看cookie
- imac java7下载地址,如何在苹果电脑上安装JAVA开发工具,经验告诉你该这样
- 登录plsql 报错 the account is locked --用户被锁
- python利用Tesseract识别验证码
- git覆盖覆盖推送_强制“git Push”覆盖远程文件
- ChAMP包处理甲基化芯片数据
- bne 1b什么意思
- JNDI注入之略微学学
- OS + Linux Shell Command find
- 如何简单易懂的了解什么是区块链?
- 贾跃亭否认乐视IPO造假 为FF融资暂时不会回国
- niu-easy环境搭建
- 方直科技招聘测试经理和测试工程师(深圳)
- 【总结】1135- 图解虚拟 DOM 之 DIff 算法
- Python执行Curl命令