用汇编实现冒泡排序

对应的C语言代码如下:

int number[6]={12,3,2,5,6,7};
for(int i=0;i<6;i++)
{
    for(int j=0;j<6;j++)  
    {
        if(a[i]<a[j])    
        {
            int temp=a[i];
            a[i]=a[j];
            a[j]=temp;
        }
    }
}
汇编代码(从大到小排列):
DATA SEGMENT
	BUF DB 12,3,2,5,6,7     ;定义字节数据区
DATA ENDS

STACK SEGMENT STACK       ;定义堆栈
	DB 32 DUP (0)
STACK ENDS

CODE SEGMENT                ;代码段开始
   ASSUME CS:CODE,DS:DATA,SS:STACK    ;假定当前的段寄存器
START:
MOV AX,DATA
MOV DS,AX      ;数据段首地址送DS
MOV AX,STACK    
MOV SS,AX      ;栈首地址送给	SS
MOV SP,32
MOV CX,6    ;控制外层循环次数为6次
LOOP1:
	MOV SI,0    ;SI清零
	PUSH CX     ;CX进栈,保存外层CX值
	MOV CX,6    ;内层循环次数
LOOP2:
	MOV AL,DS:[SI]
	MOV AH,DS:[SI+1]
	CMP AL,AH       ;比较相邻两数的大小,AL>AH跳转,否则交换
	JNC OVER
	MOV DS:[SI],AH    ;交换相邻两数
	MOV DS:[SI+1],AL
OVER:
	INC SI
	LOOP LOOP2        ;内层循环
	POP CX
	LOOP LOOP1        ;外层循环

	MOV AX,4C00H     ;返回dos
	INT 21H         ;系统中断
CODE ENDS
END START

运行截图如下:

 

其实还可以优化,比如循环次数可以减少或者用快排等等都可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值