汇编语言 冒泡法排序一组有符号数据并显示

目标:20个有符号数,利用冒泡法进行排序,显示原数据和排好序的数据

运行结果如图

 代码

STACK	SEGMENT STACK 'STACK'
	DW 100H DUP(?)
TOP	LABEL WORD
STACK	ENDS

DATA 	SEGMENT
INITBUF	DW 20	    ;存储初始的20个数据(冒泡排序要遍历10次)
	    DW 1,-256,2,0,3,-255,-44,37,43,20
	    DW 0,7,110,321,-999,-70,666,-8,8,0
;INITBUF	DW 20	;(冒泡排序要遍历19次)
;	    DW 9,8,7,6,5,4,3,2,1,0
;	    DW -10,-9,-8,-7,-6,-5,-4,-3,-2,-1
SORTBUF	DW 20	    ;存储排序好的数据
	    DW 20 DUP(?)
LPFLAG	DW 0	    ;为0表示已排序好,用于提前结束冒泡循环
MESS1	DB 'Initial Data:','$'		
MESS2	DB 0AH,0DH,'Sorted Data:','$'	
MESS4	DB 0AH,0DH,'NAM:dlj_luo','$'
MESS5	DB 0AH,0DH,'NO.20230425','$'
DATA 	ENDS

CODE 	SEGMENT
	ASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK	;分配定义段
START:	
	MOV AX, DATA
	MOV DS, AX
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
汇编语言符号冒泡排序是一种常见的排序算法,它通过比较相邻的元素并交换位置来实现排序。下面是一个简单的汇编语言符号冒泡排序的示例代码: ```assembly section .data array db 5, 2, 8, 1, 9 ; 待排序的数组 length equ $ - array ; 数组长度 section .text global _start _start: mov ecx, length ; 将数组长度存入ecx寄存器 dec ecx ; ecx减1,用于内层循环比较次数 outer_loop: mov ebx, 0 ; 用于标记是否发生交换的标志位 mov edi, 0 ; edi用于内层循环索引 inner_loop: mov al, [array + edi] ; 将当前元素加载到al寄存器 cmp al, [array + edi + 1]; 比较当前元素和下一个元素 jbe no_swap ; 如果当前元素小于等于下一个元素,则跳过交换 ; 交换当前元素和下一个元素 xchg al, [array + edi + 1] mov [array + edi], al mov ebx, 1 ; 设置交换标志位为1 no_swap: inc edi ; 内层循环索引加1 loop inner_loop ; 内层循环 cmp ebx, 0 ; 检查交换标志位是否为0 jne outer_loop ; 如果发生了交换,则继续外层循环 ; 排序完成,输出结果 mov edx, length ; 输出数组长度 mov ecx, array ; 输出数组地址 mov ebx, 1 ; 文件描述符(stdout) mov eax, 4 ; 系统调用号(write) int 0x80 ; 调用系统调用 exit: mov eax, 1 ; 系统调用号(exit) xor ebx, ebx ; 返回值(0) int 0x80 ; 调用系统调用 ``` 以上代码使用汇编语言实现了无符号冒泡排序算法。它通过两层循环,外层循环控制排序的轮数,内层循环进行相邻元素的比较和交换。在每一轮内层循环结束后,检查是否发生了交换,如果没有交换则表示数组已经有序,排序完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值