8086汇编语言实现冒泡排序|超详细注释解释
前言
那么这里博主先安利一些干货满满的专栏了!
这两个都是博主在学习Linux操作系统过程中的记录,希望对大家的学习有帮助!
Linux Syshttps://blog.csdn.net/yu_cblog/category_11786077.html?spm=1001.2014.3001.5482这两个是博主学习数据结构的同时,手撕模拟STL标准模版库各种容器的专栏。操作系统Operating Syshttps://blog.csdn.net/yu_cblog/category_12165502.html?spm=1001.2014.3001.5482
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