📜  8086程序以升序对整数数组进行排序(1)

📅  最后修改于: 2023-12-03 15:29:13.004000             🧑  作者: Mango

8086程序以升序对整数数组进行排序

本次我们将要介绍如何使用8086汇编语言编写一个程序,对一个整数数组进行升序排序。该程序可以被嵌入到其他程序中,以实现更多实际应用。

必要前置知识

在开始编写程序之前,我们需要了解以下你在此项目中会用到的概念:

  • 寄存器:像AX,BX这样的寄存器以及 CS,DS,ES,SS等段寄存器,是我们在执行汇编语言时用来存储值和地址的工具。
  • 内存:即随机存储器(RAM),是给程序运行使用的存储空间,这里也指代了程序中使用到的储存数据。
  • 汇编指令:汇编指令是汇编语言中的命令,用于操作寄存器、内存和其他部件。8086处理器有多种指令,例如MOV,ADD和CMP等。
程序概览

该程序包含两个过程:将数据复制到内存中,以及对该数据进行排序。我们将一步步去学习这两个过程。

数据的复制到内存中

在这个程序中,数据存储在一个整数数组中。 因此,在执行程序之前,需要将该数据复制到内存中。

以下是数据复制程序的示例代码:

    .data
    array dw 5, 3, 7, 2, 8, 1
    n dw 6 ; 数组中的数据总数
    .code
    mov cx, n
    mov di, offset array
    mov si, offset array
    mov ax, 0
    copy:
        cmp cx, 0
        je endcopy
        mov ax, [si]
        mov [di], ax
        inc si
        add di, 2
        dec cx
        jmp copy
    endcopy:

在这个小程序中,我们定义了一个整数类型的数组“array”, 并使用“n”变量来存储存储在数组中的数据总数。

在上述代码段中,我们将CX寄存器加载到数组“array”中的数据总数。 然后,将DI寄存器加载到“array”数组的地址,并将SI寄存器设置为相同的地址。AX寄存器被设置为0以方便操作。接下来,按照以下算法在循环中迭代:

1.比较CX寄存器中的值是否为0。 2.如果是,则跳转到“endcopy”标签。 3.将[SI]中的值存储到AX寄存器中。 4.将AX寄存器中的值存储到[DI]中。 5.将SI寄存器加1,将DI寄存器加2. 6.将CX寄存器减1. 7.无条件跳转到“copy”标签。

一切都做完后,我们将移动到程序的下一部分,即排序程序。

数组的升序排序

我们使用冒泡排序法来排序这个数组。冒泡排序是一种简单而可靠的排序算法,它从数组的开始处开始,循环嵌入,比较相邻两个元素的值。如果发现前面的值大于后面的值,则交换这两个值。

具体来说,当开始处理数组时,排序程序会将CX设置为数组中的数据总数减1,然后开始循环比较相邻元素的值。每次循环都将CX减1, 这样就可以在之后的循环中避免对排序好的数据进行修改。

以下是排序程序的示例代码:

    mov cx, n
    mov bx, 2
loop1:
    mov si, offset array
    mov di, offset array
    add di, bx
    sub cx, 1
loop2:
    mov ax, [di-2]
    cmp ax, [di]
    jle skip
    mov bx, [di]
    mov [di-2], bx
    mov [di], ax
skip:
    add di, 2
    dec cx
    jnz loop2
    add bx, 2
    cmp bx, n
    jl loop1

这段代码中,我们首先将CX寄存器加载到数组“array”中的数据总数,并将BX寄存器设置为2。这是因为我们是按字(2字节)排序数据的。 然后,我们将SI寄存器和DI寄存器指定为要排序的数组位置。

CX寄存器将在每次排序操作中递减1,同时,BX寄存器将每次递增2,指向下一个需要操作的数据。 而在第二层循环中,我们将AX寄存器加载到当前和下一个数值。如果下一个值小于当前值,则使用MOV指令将下一个数值存储在当前位置。 最后,DI寄存器递增2以指向下一个数据点。

以上就是完整的8086汇编程序,它可以在Assembler上编译并运行。如需在其他程序中使用,可将其嵌入到其他应用程序中。

总结

本项目中,我们使用8086汇编语言编写了一个可以对整数数组进行升序排序的程序。此程序将数据逐个复制到内存中,然后使用冒泡排序算法对其进行排序。这个程序可以嵌入到您的其他程序中,并且可以扩展为更大的应用程序。我们相信,您掌握了这些概念和技术后,将更加了解编写有用的汇编程序的过程。