汇编排序小程序

                                                            汇编排序小程序

                                                                     kvew      www.smatrix.org    

刚开始看汇编,按着自己的思路写了这个程序,感觉很长的样子,后来看过几个排序的例程比这个短多了。还是寄存器的使用欠火候,呵呵,过河拆桥的本领还没到家啊!

先说说我的思路吧,用两个寄存器记录下数据的首地址和第二个地址,然后比较,第一个比第二个大,则交换,然后地址双双后移,再比较,否则两个直接后移一位,这样第一轮下来就把最大的放到了最后,然后依此类推,把第二大的放到倒数第二-------------循环结束时就把最小的放到第一的位置了。

下面程序编译运行应该得到123456789的字串。由于刚刚接触,程序还有待改进,如果您慷慨赐教,不胜感激!

源程序如下:

DATA SEGMENT

X       DB           5,1,3,4,7,2,9,8,6
         
DATA ENDS

STACK   SEGMENT      STACK
                DB         200          DUP(?)
STACK          ENDS

CODE SEGMENT
                          ASSUME  CS:CODE,DS:DATA,SS:STACK


START: 
              MOV  AX,DATA
              MOV  DS,AX
              MOV  CX,8                               ;X中只有9个数,外部循环8次

              LEA  DI,X
              MOV  SI,DI                    ;DI为X第一个元素地址
               ADD  SI,1                     ;SI+1 为第二个元素地址
  
       

                PUSH SI                      ;保存这两个地址,外部第二轮循环同样是从开始比较
                PUSH DI
                
 LP:        MOV  BX,CX                   ;BX控制内部循环次数 1
                 
 LP1:      

             MOV  AL,[DI]
             CMP  AL,[SI]             ;比较DI和SI指向的元素的大小 
    
             JL   LP2               ;DI指的数比SI小,跳到L4
          
  
             XCHG AL,[SI]            ;比SI大,交换它们中的内容
             XCHG AL,[DI]
          

          
             DEC  BX                 ;比过一次后,BX减1
             CMP  BX,0
             JZ   LP3             ;如果BX为0了,说明内部的循环结束
             MOV  DI,SI            ;如果BX不为0,SI和DI都移向下一个元素
              ADD  SI,1
              JMP LP1               ;跳到前面继续比较


          
LP2:       DEC   BX
               CMP   BX,0
               JZ    LP3         
               ADD   SI,1
               ADD   DI,1
               JMP   LP1

LP3:       POP   DI         ;取出先前保存的首地址,进行下一次外部循环
               POP   SI
             LOOP  LP
    
             MOV   AH,2      ;准备打印结果
             MOV   CX,9
              LEA   BX,X
LP4:     MOV    DL,[BX]   ;这个循环用来打印出结果
             ADD     DL,30H
             INT       21H
             INC       BX
             LOOP  LP4
         

             MOV      AH,4CH
             INT 21H
 
CODE ENDS
             END START

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值