汇编--冒泡排序

代码 在emu8086调试过

assume cs:code,ds:data
data segment
   array dw 49,38,65,97,76,13,27     ;要排序的数
   count dw ($-array)/2     ;获取排序数目

data ends


code segment    
    start:mov ax,data
          mov es,ax  
          mov ds,ax   
          
    retry:cmp count,1    ;是否循环排序过count-1次
          je exit
          dec count
          mov cx,count
          mov si,offset array
          cld
    next1:lodsw
          cmp ax,[si]
          jle next2     
          xchg ax,[si]
          xchg ax,[si-2]
         
    next2:loop next1
          jmp short retry  
         
     exit:mov ax,4c00h  :程序结束
          int 21h
     code ends
end start

 

每次排序依次找到最大的数,第二大的数。。。以此类推。程序解释:

lodsw 将ds:[si]的字单元内容给ax,并且将si加2或减2,此程序中由于设置了cld,所以每次si都自动加2;

jle 和cmp配合使用,判断low and equal,就是小于或等于,即操作数1小于或等于操作数2就执行跳转,否则顺序执行;

xchg 互换指令,即将ax和[si]中的内容互换,该指令不影响标志位。

最后运行结果可以通过查看内存的方式验证,这里就不输出到前端了。

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值