8086汇编语言程序设计简要记录(二)
刚来吾爱破解,小小白一枚,分享一些微机原理课上自己写的8086汇编源码给和我一样的小小白,一起学习用冒泡排序算法实现对六个数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 ;外循环5次
L1: ;外循环
MOV DI,CX ;将CX的值保存于DI,用于内循环L2的计数
MOV BX,0
L2: ;内循环
MOV AL,NUM
CMP AL,NUM
JNC COM
XCHG AL,NUM
MOV NUM,AL
COM:
INC BX
DEC DI
JNZ L2 ;若DI不为0,则跳转到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 ;将CX的值压栈,即另外保存,CX原有的值将用于内循环L2的计数
MOV BX,0
L2: ;内循环
MOV AL,NUM
CMP AL,NUM
JNC COM
XCHG AL,NUM
MOV NUM,AL
COM:
INC BX
LOOP L2
POP CX ;跳出内循环L2后,将弹栈的值赋给CX,用于外循环L1的计数
LOOP L1
MOV AH,4CH
INT 21H
CODE ENDS
END START
页:
[1]