汇编--冒泡排序

来源:互联网 发布:淘宝网如何提高排名 编辑:程序博客网 时间:2024/04/30 18:58

代码 在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]中的内容互换,该指令不影响标志位。

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

 

 

原创粉丝点击