Chinaunix首页 | 论坛 | 博客
  • 博客访问: 124369
  • 博文数量: 31
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 470
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-31 20:04
文章分类

全部博文(31)

文章存档

2011年(1)

2008年(30)

我的朋友

分类: WINDOWS

2008-04-02 21:53:14

DATAS SEGMENT
    string db
'a','$','c','$','f','$','x','$','y','$','z','$','d' ,'$','g','$','i','$','f','$'
   
;定义十个字母,用$分割
DATAS ENDS
CODES SEGMENT
    ASSUME
CS:CODES,DS:DATAS
START:
   
MOV AX,DATAS
   
MOV DS,AX
 
;排序开始,用冒泡排序
    mov cx,2*9;第一次进入循环比较九次,都是字(包含了分隔符$,所以有2字节),所以要9*2
Outer:
   
mov bx,0 ;bx用来指向即将比较的字母,先要清零
Inner:
   
mov ax,[bx] ;第一个字母给ax
    cmp ax,[bx+02h] ;第一个字母和第二个字母比较ASCII的大小
    jg Changed ;如果现在比较的两个本来就是大的在前面,则不用交换,跳之
   
   
xchg ax,[bx+02h]
   
mov [bx],ax ;这两句:如果前面没有跳转,把小的放到后面
Changed:
   
inc bx
   
inc bx ;给bx加上2,可以指向下一个需要比较的字母
    cmp bx,cx ;看一下当前的内层循环是不是应该结束了
    jl Inner ;如果当前的内层循环没有结束,再次回到内层循环(bx指定了当前内层循环需要的次数)
    dec cx ;[color=#FF0000]当cx=2*9时这里最大位已经在最后一位了(因为你每次都是把最大的放到后面)...当cx=0时排序结束.[/color]
   
dec cx ;如果bx不小于cx了,也就代表当前内层循环可以结束了
    jg Outer ;怎么跳出内层循环的???? 又是怎么跳出内层循环的??????????????
    ;排序结束
   

   
mov cx, 10    ;输出10个数
    lea si,string
begin1:
   
mov dx,si
   
mov ah,9
   
int 21h
   
inc si
   
inc si
    loop begin1
   
   
MOV AH,4CH
   
INT 21H
CODES ENDS
    END START

 
阅读(2249) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~