8086汇编语言学习1-loop循环实现冒泡排序

发布时间 2023-03-22 21:42:46作者: Echizen-Ryoma

关键点:

  1.loop指令的原理、断点位置

  2.条件转移指令JNLE(小于或等于)和JG(大于)、与CMP(比较)一起使用

DATA SEGMENT
A dw 1,3,4,2,5
DATA ENDS
CODE SEGMENT
	ASSUME CS:CODE,DS:DATA
START:	MOV	AX,DATA
	MOV	DS,AX
	;MOV	BX,OFFSET A;待排序内容的偏移地址

	MOV	CX,5;5个数,循环5次
	;DEC	CX;自减1,第一轮要比较4次?不太确定
loop1:	MOV	DI,CX;DI存放CX,起到保护作用
	MOV	BX,0;BX存放偏移地址

loop2:	MOV	AX,A[BX];有[],是存储器寻址方式里的相对寄存器寻址,间址寄存器为BX,用DS内容作为段基址
	CMP	AX,A[BX+2];比较大小,+2是由于每个数据是字定义,1字=2字节(8086)
	JNLE	CONTINUE;AX更大,不用替换,转移
	XCHG	AX,[BX+2];AX更小,交换,AX始终存放大的那个数,第n轮结束后,第5-n+1个数是余下5-n+1个数里最小的
	MOV	A[BX],AX;用AX作为交换媒介
CONTINUE:
	ADD	BX,2
	LOOP	loop2
	MOV	CX,DI;恢复CX,循环时CX会自减
	LOOP	loop1

	MOV	AH,4CH
	INT	21H
CODE ENDS
	END START