美文网首页
x86基础实验-冒泡排序

x86基础实验-冒泡排序

作者: cxzzzz | 来源:发表于2018-05-18 20:58 被阅读0次
    简介:
    用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
    

    相关文章

      网友评论

          本文标题:x86基础实验-冒泡排序

          本文链接:https://www.haomeiwen.com/subject/wksndftx.html