x86基础实验-冒泡排序

2018-05-18  本文已影响0人  cxzzzz
简介:
用x86实现冒泡排序,是课本上的一个例题,但课本上原本是从小到大的冒泡排序,现在改为从大到小的排序。
程序运行结果:

(运行前内存情况)(红色部分为水印)(直接把学号传到网上会不会出问题....)


image.png

(运行后内存情况)


image.png

(运行结果)


image.png
源代码:
STACK1  SEGMENT PARA    STACK
STACK_AREA      DW      100H DUP(?)
STACK_BTM       EQU     $-STACK_AREA
STACK1          ENDS

DATA1   SEGMENT
TABLE_LEN       DW      16
TABLE           DW      200,300,400,10,20,0,1,8    ;要排序的数据
                DW      41H,20,42H,50,60,0FFFFH,2,3
DATA1   ENDS

CODE1   SEGMENT
        ASSUME  CS:CODE1,DS:DATA1,SS:STACK1
MAIN    PROC    FAR              
        MOV     AX,STACK1      ;初始化寄存器
        MOV     SS,AX
        MOV     SP,STACK_BTM
        MOV     AX,DATA1
        MOV     DS,AX

LP1:    MOV     BX,1
        MOV     CX,TABLE_LEN
        DEC     CX
        MOV     SI,OFFSET TABLE
LP2:    MOV     AX,[SI]
        CMP     AX,[SI+2]
        ;JBE     CONTINUE    ; 从低到高排序
        JAE     CONTINUE     ;从高到低排序
        XCHG    AX,[SI+2]
        MOV     [SI],AX
        MOV     BX,0
CONTINUE:       ADD     SI,2
        LOOP    LP2
        CMP     BX,1
        JZ      EXIT
        JMP     SHORT   LP1

EXIT:   
        MOV     AX,OFFSET TABLE
        MOV     CX,TABLE_LEN

MAIN_OUTPUT_LOOP:
        PUSH    AX
        CALL    OUTPUT
        ADD     AX,2
        LOOP    MAIN_OUTPUT_LOOP

        MOV     AX,4C00H
        INT     21H

MAIN    ENDP

OUTPUT  PROC    NEAR    ;输出排序后的数组,[SP+2]为数组首地址        
        PUSH AX 
        PUSH BX
        PUSH CX
        PUSH DX

        MOV     BX,SP 
        MOV     BX,SS:[BX+10]
        MOV     BX,DS:[BX]
        MOV     CX,4

OUTPUT_LOOP:
        
        MOV     DL,BH

        SHR     DL,1
        SHR     DL,1
        SHR     DL,1
        SHR     DL,1

        CMP     DL,10

        JB      OUTPUT_NUM

        ADD     DL,41H
        SUB     DL,10
        JMP     OUTPUT_FIN

OUTPUT_NUM:
        ADD     DL,30H

OUTPUT_FIN:
        MOV     AH,02H
        INT     21H

        PUSH    CX
        MOV     CL,4
        SHL     BX,CL
        POP     CX
        LOOP    OUTPUT_LOOP

        MOV     DL,09H  ;HORIZONTAL TAB
        MOV     AH,02H
        INT     21H
        
        POP DX 
        POP CX 
        POP BX 
        POP AX

        RET 2

OUTPUT  ENDP



CODE1   ENDS
        END     MAIN
上一篇下一篇

猜你喜欢

热点阅读