8086汇编语言程序实现数组排序

版权申诉
0 下载量 180 浏览量 更新于2024-08-27 收藏 96KB DOC 举报
"8086汇编语言编程示例,包括数组排序程序。" 本文档提供了一个使用8086汇编语言实现的数组排序的典型程序。8086是Intel公司的一款16位微处理器,广泛用于早期个人计算机系统。在汇编语言编程中,程序员直接对机器指令进行编程,以实现特定的功能。 首先,程序定义了一个名为`BUF`的数据段,其中包含了用作排序的数组。数组由多个16位的双字节整数组成,数值有正有负,如 `-897, 345, 6789` 等。数组长度(元素个数)通过计算`BUF`段的起始地址与最后一个元素地址的差值得到,存储在变量`LEN`中。 接着,程序使用了`ASSUME`指令来指定代码段(`AAA`)和数据段(`AAAMAIN`)的段寄存器,这样在后续指令中可以不用显式地提及段寄存器。在主程序中,先通过`PUSHCS`和`POPDS`将代码段寄存器的值复制到数据段寄存器,确保数据段指向正确的内存区域。 主程序通过`LEA`指令获取数组`ARY`的首地址,并将其加载到`SI`寄存器。接下来,使用`CX`寄存器作为计数器,循环遍历数组,调用`DISP`过程显示数组元素,然后调用`SPACE`过程打印空格分隔每个元素。完成显示后,调用`SORT`过程对数组进行排序,再次显示排序后的数组。 `DISP`过程用于将16位的数字转换为ASCII字符并打印。它首先将`SI`寄存器指向缓冲区末尾,然后将数字除以10,将商和余数分别处理,将余数加上30H(十进制的48,即ASCII码的'0')并存储在缓冲区中,直到数字变为0。如果原始数字为负,则在缓冲区前面插入一个减号。最后,调用DOS中断`INT 21H`的9号功能(AH=9)打印字符串。 `SORT`过程实现了简单的冒泡排序算法。它通过两个嵌套循环来比较并交换相邻元素,直至整个数组排序完成。外层循环由`CX`控制,内层循环通过`DI`寄存器和`SI`寄存器完成元素间的比较和交换。如果当前元素大于其后一个元素,就交换它们的位置。这个过程会重复进行,直到所有元素都在正确的位置上。 程序的结束部分设置`AH`寄存器为4CH(退出DOS程序的系统调用),调用`INT 21H`结束程序。 这个8086汇编程序展示了如何使用基本的汇编指令进行数据操作、内存访问、循环控制以及调用子程序,同时涵盖了数据的输入输出和简单的算法实现,是学习8086汇编语言的典型实例。