关键点:
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
标签:8086,CODE,DATA,MOV,冒泡排序,CX,AX,BX,loop From: https://www.cnblogs.com/cqu-Ryoma/p/17245622.html