8086 汇编是一种经典的底层语言,本文将结合代码介绍使用汇编语言来实现冒泡排序。
题目要求
数据区存放一组数据,要求采用冒泡法对数据区的数据按递增排序,并且从最后一位开始向前比较,排序完成后把数据按排序后的递增顺序放回。
设计思路
冒泡排序在高级语言中同时要使用双重循环,这里也不例外。因此一层一层的来。
先实现内层循环,即一个一个相邻的数进行比较,该调换顺序的调换顺序,不用调换的直接进行下一位比较,具体看代码中SORT..LOOP部分。
再实现外层循环,根据冒泡排序,每进行一次内层循环,就会有一个最小的数到达它该到达的位置,这样一来下一趟排序循环的次数就减一,于是在外层循环中我们就控制内层循环的次数(CX),内层循环进行一次退出后,在外层循环将循环次数减一(DEC CX)再让其进入循环,直到循环次数为 0 (CMP CX, 0)退出。另外还有一个要保存的是每次循环开始的位置(PUSH SI)。
参考代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| DATA SEGMENT ORG 3000H COUNT EQU 6 STR DB 12H, 78H, 62H, 50H, 22H, 33H DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX, DATA MOV DS, AX MOV SI, OFFSET STR ADD SI, COUNT DEC SI MOV CX, COUNT
W: PUSH CX PUSH SI
SORT: MOV BL, [SI] CMP BL, [SI-1] JB A JMP B
A: XCHG BL, [SI-1] MOV [SI], BL
B: DEC SI LOOP SORT
POP SI POP CX DEC CX CMP CX, 0 JA W JMP EXIT
EXIT: MOV AH, 4CH INT 21H
CODE ENDS END START
|