用冒泡排序算法实现对六个数6、8、2、0、16、5从大到小排序。
对于8086汇编语言,冒泡排序算法的关键是如何处理内循环和外循环对计数寄存器CX的争夺(循环体有两个,但用于LOOP循环计数的寄存器只有一个);
其中一种方法可使用其他寄存器来保存一个循环体的计数值,但只有一个循环体可用LOOP指令来实现循环;
另一种方法则可使用堆栈来保存CX的值(相当于CX的值有两个),两个循环体均可使用LOOP指令。
方法一
源程序
DATA SEGMENT NUM DB 6H,8H,2H,0H,10H,5H DATA ENDS
CODE SEGMENT ASSUME DS:DATA,CS:CODE
START: MOV AX,DATA MOV DS,AX
MOV CX,5
L1: MOV DI,CX MOV BX,0
L2: MOV AL,NUM[BX] CMP AL,NUM[BX+1] JNC COM XCHG AL,NUM[BX+1] MOV NUM[BX],AL
COM: INC BX DEC DI JNZ L2 LOOP L1
MOV AH,4CH INT 21H CODE ENDS END START
|
调试结果

方法二
源程序
DATA SEGMENT NUM DB 6H,8H,2H,0H,10H,5H DATA ENDS
CODE SEGMENT ASSUME DS:DATA,CS:CODE
START: MOV AX,DATA MOV DS,AX
MOV CX,5
L1: PUSH CX MOV BX,0
L2: MOV AL,NUM[BX] CMP AL,NUM[BX+1] JNC COM XCHG AL,NUM[BX+1] MOV NUM[BX],AL
COM: INC BX LOOP L2 POP CX LOOP L1
MOV AH,4CH INT 21H
CODE ENDS END START
|
调试结果
