8086汇编语言实现冒泡排序|超详细注释解释

 前言

那么这里博主先安利一些干货满满的专栏了!

这两个都是博主在学习Linux操作系统过程中的记录,希望对大家的学习有帮助!

操作系统Operating Syshttps://blog.csdn.net/yu_cblog/category_12165502.html?spm=1001.2014.3001.5482Linux Syshttps://blog.csdn.net/yu_cblog/category_11786077.html?spm=1001.2014.3001.5482这两个是博主学习数据结构的同时,手撕模拟STL标准模版库各种容器的专栏。

STL源码剖析https://blog.csdn.net/yu_cblog/category_11983210.html?spm=1001.2014.3001.5482手撕数据结构https://blog.csdn.net/yu_cblog/category_11490888.html


;2. 冒泡排序法
;设数据段中初始存放了 10 个字节的无符号数,要求使用冒泡排序法 将这些数从小到大排序。
;排序完成后放在以 3000H 为初始单元的地 址中。
;(样例: 51H, 3AH, 95H, 8DH, 90H, 0A7H, 0C1H, 77H, 24H, 0B1H)  

DATA SEGMENT
    DATA1 DB 51H, 3AH, 95H, 8DH, 90H, 0A7H, 0C1H, 77H, 24H, 0B1H  ;存放数据
DATA ENDS
CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
      MOV DS,AX           ;数据段
      MOV CX,9            ;外层循环比较9次
OUTERLOOP:      
      MOV AX,CX           ;内层循环次数等于当前外层循环次数
      PUSH CX             ;保护现场
      MOV CX,AX           ;因为外面和里面都要用CX,所以CX压栈
      LEA DI,DATA1    
      MOV SI,DI           ;获得数据段首地址
      ADD SI,9      
      ADD DI,8            ;得到最后两位地址
INNERLOOP:       
      MOV AL,[SI]  
      MOV BL,[DI] 
      CMP AL,BL           ;比较当前两数大小
      JA SWAP             ;交换
      MOV [SI],BL
      MOV [DI],AL
      SWAP:   
      DEC SI              ;因为这个循环是从后往前的,所以要dec
      DEC DI
      LOOP INNERLOOP    
      POP  CX             ;CX出栈
      LOOP OUTERLOOP      
      ;现在已经排好序了
      MOV CX,10           ;把数字放过去就行了
      LEA SI,DATA1     
      MOV DI,3000H
COPYARRAY:      
      MOV AL,[SI]
      MOV [DI],AL     
      INC SI              ;自增放下一位数
      INC DI
      LOOP COPYARRAY
      MOV AX,4CH
      INT 21H     
CODE ENDS
END START
posted @ 2023-07-15 17:30  背包Yu  阅读(338)  评论(0编辑  收藏  举报  来源