NIMITIZ 发表于 2021-5-8 22:21

8086汇编语言程序设计简要记录(二)

刚来吾爱破解,小小白一枚,分享一些微机原理课上自己写的8086汇编源码给和我一样的小小白,一起学习

用冒泡排序算法实现对六个数6、8、2、0、16、5从大到小排序。

对于8086汇编语言,冒泡排序算法的关键是如何处理内循环和外循环对计数寄存器CX的争夺(循环体有两个,但用于LOOP循环计数的寄存器只有一个);

其中一种方法可使用其他寄存器来保存一个循环体的计数值,但只有一个循环体可用LOOP指令来实现循环;

另一种方法则可使用堆栈来保存CX的值(相当于CX的值有两个),两个循环体均可使用LOOP指令。


方法一:
DATA SEGMENT
    NUM DB 6H,8H,2H,0H,10H,5H
DATA ENDS

CODE SEGMENT
    ASSUME DS:DATA,CS:CODE

    START:
    MOV AX,DATA
    MOV DS,AX

    MOV CX,5      ;外循环5次

    L1:   ;外循环
    MOV DI,CX       ;将CX的值保存于DI,用于内循环L2的计数
    MOV BX,0

    L2:   ;内循环
    MOV AL,NUM
    CMP AL,NUM
    JNC COM
    XCHG AL,NUM
    MOV NUM,AL

    COM:
    INC BX
    DEC DI
    JNZ L2      ;若DI不为0,则跳转到L2执行
    LOOP L1

    MOV AH,4CH
    INT 21H
CODE ENDS
    END START

方法二:
DATA SEGMENT
    NUM DB 6H,8H,2H,0H,10H,5H
DATA ENDS

CODE SEGMENT
    ASSUME DS:DATA,CS:CODE

    START:
    MOV AX,DATA
    MOV DS,AX

    MOV CX,5

    L1:   ;外循环
    PUSH CX   ;将CX的值压栈,即另外保存,CX原有的值将用于内循环L2的计数
    MOV BX,0

    L2:   ;内循环
    MOV AL,NUM
    CMP AL,NUM
    JNC COM
    XCHG AL,NUM
    MOV NUM,AL

    COM:
    INC BX
    LOOP L2
    POP CX      ;跳出内循环L2后,将弹栈的值赋给CX,用于外循环L1的计数
    LOOP L1

    MOV AH,4CH
    INT 21H

CODE ENDS
    END START
页: [1]
查看完整版本: 8086汇编语言程序设计简要记录(二)