汇编语言:冒泡排序算法将10个数按从小到大顺序排列
汇编语言:冒泡排序算法
题目描述
自定义一组有首地址为data的10个字的数组,请利用冒泡排序算法来编写程序,使该数组中的数按照从小到大的次序有序化。(注:10个字可以自己定义。)
datas segmentdata1 dw 7,5,3,2,6,9,10,1,8
datas ends
冒泡排序是一种较为简单的排序算法,需要使用嵌套循环。每一个外循环会将未排序数据中的最大值排到末尾,每一个小循环会将相邻两个数比较大小,从而使较大的数下沉,较小的数上浮。
本题中,我们需要使用条件转移指令,比较指令(CMP),交换指令(XCHG)。值得一提的是,CMP和XCHG的两个操作数不能同时为内存中的数据,但可以一个是寄存器,一个是内存数据。所以,在比较和交换数据的时候,我们需要将其中一个内存数据放到寄存器中。
(代码中有注释,可直接看代码)
思路:
将循环次数放入CX(设需要排序的数据有N个,则需要执行N-1个循环,即此时应MOV CX,9)。
1.CX-1判断CX是否符合循环条件,当CX=0时,程序结束;否则,SI置零,BX置2倍的CX作为小循环的判断条件(若数据使用DB定义则无需使用BX,可直接使用CX);
2.将DATA1[SI]放入AX寄存器中,并与DATA1[SI+2]作比较(由于本体数据定义时DW,所以用+2,若使用DB定义数据则应+1),若小于等于,则执行第3步;否则交换DATA1[SI]和DATA1[SI+2];
3.比较SI和BX,相等时执行第1步,否则,SI+2,跳转到第二步。
以上就是一个较为简单的冒泡排序法步骤,接下来看代码:
DATAS SEGMENTDATA1 DW 7,5,3,2,6,9,10,1,8
DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS
START:MOV AX,DATASMOV DS,AXMOV CX,9
L1: ;最外层循环MOV SI,0 ;设置SI为零 CMP CX,0 ;判断循环是否结束JE EXITDEC CX ;cx-1MOV BX,CXADD BX,CX ;将bx置为cx的2倍,用来判断SI结束时的大小;若数据以字节定义,则只需要将bx置为cx即可
L2:MOV AX,DATA1[SI] ;不能直接比较内存中的数字,所以我们需要将其中一个数字放到寄存器AX中CMP AX,DATA1[SI+2] ;比较两个数JLE L3 ;小于等于的话,则直接跳到下一对数据的比较XCHG AX,DATA1[SI+2] ;若大于,则通过两个XCHG语句,交换两内存中的数字XCHG AX,[SI];内层循环结束时跳到外层循环
L3:CMP SI,BXJE L1ADD SI,2 ;si+2,开始下一对数的比较JMP L2
EXIT:MOV AH,4CHINT 21H
CODES ENDSEND START
排序结果
冒泡排序前运行前内存数据内容:
冒泡排序后:
冒泡排序运行正确,此题目完成!
汇编语言:冒泡排序算法将10个数按从小到大顺序排列相关推荐
- 计算机编程输入3个数排序,汇编语言 输入10个数排序并输出的实现
一:题目描述 在键盘输入任意10个数 按从小到大排序后,在计算机屏幕上先输出来.要有结果提示(字符串显示). 将10个数做累加,结果在计算机屏幕显示累加和. 二:伪指令的定义 1.数据段 ATAS S ...
- c语言输入10个数从小,C语言中,从键盘输入10个数,从小到大排列输出,怎
公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:C语言中,从键盘输入10个数,从小到大排列输出,怎么写啊,最好注回答:#includestdio.h void swap(int * ...
- 10个数冒泡排序法c语言代码,输入10个数用冒泡法排序
输入10个数,用冒泡排序法按由小到大顺序排序并输如下参考: #包括< stdio, h > Intmain() { Inta[10]={0}: IntI=0,j=0,t=0: For (I ...
- 输入10个数,根据提示进行从小到大输出或从大到小输出
Description 从键盘输入一个字符和10个整数,若输入字符是'A',将这10个数按从小到大的顺序输出:若输入字符是'D',则按从大到小输出:若输入其他字符,就结束. Input 多组测试数据, ...
- 【经典算法实现 3】冒泡排序算法(单向冒泡,双向冒泡)
[经典算法实现 3]冒泡排序算法 及 算法优化 一.单向冒泡排序算法 O(n^2)(从小到大) 1. 核心算法实现 2. 代码实测 二.双向冒泡排序算法 O(n^2)(从小到大) 1. 核心算法实现 ...
- Java | 用Java实现冒泡排序算法
冒泡排序算法 冒泡排序算法思路:(以从小到大为例) 从第一个元素开始,相邻的两个元素比较,若前者比后面的大,则两者交换顺序: 一次比较后,从第二个元素开始,相邻的仍遵循大者后移的规律完成一轮遍历: 一 ...
- c语言找出最大值和最小值并按降序排输出,C语言用排序法给十个数降序排列,用C语言编写,输入10个数按降序排列...
问题标题 C语言用排序法给十个数降序排列,用C语言编写,输入10个数按降序排列 2019-6-4来自ip:14.161.145.86的网友咨询 浏览量:562 手机版 问题补充: C语言用排序法给十个 ...
- 10个数冒泡排序流程图_(立下flag)每日10道前端面试题01
1 对象数组如何去重? 开始的时候一脸懵逼,心里想着每个对象的内存地址本身就不一样,去重的意义何在,非要去重的话,那只能通过JSON.stringify序列化成字符串(这个方法有一定的缺陷)后进行对比 ...
- 10个数冒泡排序流程图_C语言 | 冒泡排序
"要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人-万中无一" --包租婆这道理放在C语言学习上也一并受用.在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语 ...
最新文章
- Numpy入门教程:04. 数学函数
- DBCP数据库连接打满原因分析
- 简单聊下中台概念与发展
- yolov5-face无关键点测试
- (五)Java工具类ArrayUtils详解
- FreeRTOS 之五 动态内存管理(heap_1.c)详解
- [SCOI2012]滑雪 (最小生成树 Kruskal)
- 使用Tomcat部署应用
- gcovr 安装_Kudu 1.8.0 编译安装配置
- 机器学习中的Numpy库基础——向量、矩阵和数组
- android语言切换快捷键,Android的语言设置两种方法
- 使用PHPExcel实现Excel文件的导入和导出(模板导出)
- java编译成exe_java编译成exe
- 8uftp,什么是8uftp
- Github desktop界面全白怎么办?[已解决]
- 打开Chrome浏览器显示“喔唷 崩溃啦”错误的解决方法
- Clion安装及相关环境(MinGW和OpenOCD)的配置及利用Clion点亮led灯
- 电话簿管理系统(超详细)
- 2022计算机考研统考的院校有哪些,2022考研初试科目都有哪些?
- 【OpenSEES新材料/单元开发教程】第一讲 综述
热门文章
- android+qq登录测试,对于android的第三方(QQ登录,微信登录等的)测试时的签名配置...
- Java黑皮书课后题第5章:**5.17(显示金字塔)编写程序,提示用户输入一个在1到15之间的整数,然后显示一个金字塔形状的图案
- Java黑皮书课后题第2章:*2.8(当前时间)程序清单2-7给出了显示当前格林尼治时间的程序。修改这个程序,提示用户输入相对于GMT的时区偏移量,显示在这个特定时区的时间
- 自制一个 简易jQuery 的 API
- JAVA web 会话技术CookieSession
- 通过zookeeper连接hive beeline
- JavaScript中闭包实现的私有属性的getter()和setter()方法
- ndroid网络(4):HttpClient必经之路----使用线程安全的单例模式HttpClient,及HttpClient和Application的融合...
- 在ASP.NET MVC 4中使用Kendo UI Grid
- ASM上的备份集如何转移到文件系统中