如何使用汇编语言实现冒泡排序?

                                                      怎么使用汇编语言实现冒泡排序

    我们先想想C语言里是怎么实现的冒泡排序

       
#include<stdio.h>
int main()
{
    int arr[10];
    int brr[10];
    int a,c,d,s,i;
    for(a=0; a<10; a++)
        scanf("%d",&arr[a]);
    for (c=0; c<9; c++)
    {
        for(d=0; d<9-c; d++)
        {
            if(arr[d]>arr[d+1])
            {
                s=arr[d];
                arr[d]=arr[d+1];
                arr[d+1]=s;
            }
        }
    }
    for(i=0; i<10; i++)
        printf("%d\n",arr[i]);
    return 0;
}

我么可以仿照C语言来实现我们的排序
首先cx值为外层循环变量,进入第二层循环时,cx的值入栈,保留其值。
再将cx的值置为内层循环次数的值。完成双层循环。
具体实现如下


Assume cs:code,ds:data,ss:stack
  data segment
    dw 123h,5h,9h,11h,33h,6h,9h,76h;数据段初始化
    dw 100h,3h,6 dup(0);[14]内存存放外层已经循坏了多少次
  data ends
  stack segment;栈段初始化
  dw 0,0,0,0,0,0,0,0
  stack ends
  code segment;代码段
  start:
  mov ax,data
  mov ds,ax
  mov ax,stack
  mov ss,ax
  mov sp,10h
  mov cx,9
  mov bx,0
  mov dx,0
  L:  ;外层循坏,固定为9次
   push cx;外层循坏cx值入栈
   mov ax,9
   sub ax,word ptr ds:[14h];内层循坏次数9-ds:[14]次
   mov cx,ax;将循坏次数mov到cx中
   mov ax,0
   mov bx,0
  s:;内存循坏开始,每次将第da:[14]+1大的数放到最后面
   mov ax,ds:[bx];取出第一个数值
   mov dx,ds:[bx+2];取出第二个数值
   cmp ax,dx;进行比较
   jna next;如果ax<=dx就转到next,否则就继续
   push ax;实现两个数的交换
   push dx
   pop  ds:[bx]
   pop  ds:[bx+2]
   next:nop
   add bx,2;将bx往后移一个字
 loop s
   pop cx;外层循坏cx出栈
   mov ax,0;
   mov ax,word ptr ds:[14h];这里三行实现ds:[14]计数功能计算外层循坏次数
   inc ax
   mov word ptr ds:[14h],ax
 loop L
  mov ax,4c00h
  int 21h
  code ends
  end start

这样就大功告成了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值