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

发布时间 2023-03-22 21:58:09作者: 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

 

数据部分