汇编实现排序——冒泡排序

来源:互联网 发布:音箱检测软件 编辑:程序博客网 时间:2024/04/30 16:07

冒泡排序算法的运作如下:(从后往前)
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
以下为实现代码:

S0  SEGMENT STACK    DW  30 DUP(?)TOP LABEL   WORDS0  ENDSS1  SEGMENTTIP DB  "Input ten number and separate the numbers with space:", 0DH, 0AH, 24HARY DW  20 DUP(0)CRLF    DB  0DH, 0AH, 24HN   DW  0S1  ENDSS2  SEGMENT    ASSUME  SS:S0, DS:S1, CS:S2, ES:S1P   PROC    FAR    MOV AX, S0    MOV SS, AX    LEA SP, TOP    MOV AX, S1    MOV DS, AX    MOV AX, S1    MOV ES, AX    LEA DX, TIP    MOV AH, 9    INT 21H    LEA SI, ARY    XOR DX, DX    MOV BL, 10    MOV CX, 10INPUT:  MOV AH, 1    INT 21H    CMP AL, 20H ;空格分隔字符    JE  SAVE    ;输入十进制数,将数存入SI对应的内存单元    MOV DL, AL     MOV AX, [SI]    MUL BL    SUB DL, 30H    ADD AL, DL    MOV [SI], AX    JMP INPUTSAVE:       ADD SI, 2     LOOP    INPUT    ;数组保存完毕    LEA SI, ARY    MOV DI, SI    ADD DI, 2    MOV CL, 9    MOV CH, 9CMPA:   MOV BX, [DI]    CMP BX, [DI-2]    JA  CON    MOV DX, [DI-2]    PUSH    DX    MOV [DI-2], BX    POP DX    MOV [DI], DXCON:    ADD DI, 2    DEC CH    CMP CH, 0    JNE CMPA    CALL    PRINT    MOV DI, SI    ADD DI, 2    DEC CL    MOV CH, CL    CMP CL, 1    JNE CMPA    ;以下为十进制输出ARY中的数EXIT:   MOV AH, 4CH    INT 21HP   ENDPPRINT   PROC    NEAR    PUSH    SI    PUSH    CX    PUSH    AX    PUSH    DX    LEA DX, CRLF    MOV AH, 9    INT 21H    LEA SI, ARY    MOV CX, 10L1: MOV AX, [SI]    MOV N, AX    CALL    OUTPUT    ADD SI, 2    MOV DX, 20H    MOV AH, 2    INT 21H    LOOP    L1    POP DX    POP AX    POP CX    POP SI    RETPRINT   ENDPOUTPUT  PROC    NEAR    PUSH    AX    PUSH    BX    PUSH    CX    PUSH    DX    XOR CX, CX     MOV AX, N    MOV BX, 10L2: XOR DX, DX    DIV BX    PUSH    DX    INC CX    CMP AX, 0    JNE L2L3: POP DX    ADD DX, 30H    MOV AH, 2    INT 21H    LOOP    L3    POP DX    POP CX    POP BX    POP AX    RETOUTPUT  ENDPS2  ENDS    END P

这里写图片描述

1 0
原创粉丝点击