用汇编语言编写的排序程序

更新时间:2023-05-24 12:55:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

用汇编语言编写的排序程序

一 实验目的………………………………………………3

二 题目…………………………………………………..3

三 算法分析……………………………………………..3

四 流程图及算法…………………………………………5

五 源程序

附录

a、参考文献

一 实验目的:

1、 进一步熟悉汇编语言的代码;

2、 学会分析算法并构造流程图;

3、 能够完成简单的子程序设计;

4、 学会查找程序的算法。

二 题目

将以地址DATA开始的10个无符号字数据按从大到小的顺序重新排列

三 算法分析

排序算法采用冒泡法,假定待排序数组中有X1,X2,X3,…X10共十个无符号数据,冒泡排序法的具体做法是:最多有九次外循环。每次外循环均从底部开始进行两两比较,若后者大于前者,两者位置交换,反之不变。然后两两比较向前推移,直到本次外循环应完成的两两比较次数(成为内循环次数达到为止)。

此时,本次外循环结束,最大的数冒到本次外循环的顶部。第一次外循环,第一次外循环,两两比较的次数为n-1次,最大数据冒到X1的位置;第二次外循环,两两比较次数为n-2次,剩余最大数据冒到X2位置;以此类推,第n-1次外循环,两两比较次数为1次,剩余最大数据项冒到Xn-1的位置。若再一次外循环结束后,经判断本次外循环一次位置交换也未发生过或仅在底部发生过一次交换,则本次外循环结束,数的顺序已排妥,余下的外循环不用进行了。

开始

设大循环次数 DX

设小循环变量 CX

设交换标志 BX=DX

置变址值

ej

ej<=ej-1

交换

交换标志<=CX

修改变址值 DX=DX-1 CX=CX-1

CX=0

BX=DX?

结束

流程图如上所示。

根据流程图编写程序:如下:

;程序模板

SSEG SEGMENT PARA STACK 'stack'

dw 100h dup(0) ;初始化堆栈大小为100

SSEG ENDS

DSEG SEGMENT

DATA DW 150,12,54,89,73,152,45,68,98,65

COUNT EQU $-DATA

BUFO DB 6 DUP (?),'$'

DSEG ENDS

ESEG SEGMENT

;附加段:在此处添加程序所需的数据

ESEG ENDS

CSEG SEGMENT

assume cs:CSEG, ds:DSEG, es:ESEG, ss:SSEG

DISP PROC ;显示DI所指ASCII字符串的子程序 PUSH DX

PUSH AX

MOV DX,DI

MOV AH,09H

INT 21H

MOV DL,','

MOV AH,2

INT 21H

POP AX

POP DX

RET

DISP ENDP

DATCH PROC FAR ;转换数值成为ASCII串的子程序

PUSH DX ;入口参数在AX中,要转换的数在DI中 PUSH CX ;出口参数在DI中,是结果缓冲区指针 PUSH BX

MOV CX,10

MOV BX,AX

DLOP1:DEC DI

XOR DX,DX

DIV CX

OR DL,30H

MOV [DI], DL

CMP AX,0

JNZ DLOP1

POP BX

POP CX

POP DX

RET

DATCH ENDP

MAIN PROC FAR ;主程序入口

mov ax, dseg

mov ds, ax

mov ax,eseg

mov es, ax

START:XOR AX,AX

MOV DX,AX ;主程序

MOV CX,AX

MOV DX,COUNT/2 ;DX,被排序数据个数

LOP1: DEC DX ;DX,大循环变量(大循环次数) MOV CX,DX ;CX,小循环变量(两两比较次数) MOV BX,DX ;设置交换标志

LEA SI,BUFO

SUB SI,2

LOP2: MOV AX,[SI]

CMP AX,[SI-2]

JBE PASS

XCHG [SI-2],AX

MOV [SI],AX

MOV BX,CX

PASS: SUB SI,2

LOOP LOP2

CMP BX,DX

JE DLAST ;数的顺序已排妥,转DLAST JMP LOP1

DLAST:MOV CX,COUNT/2 ;显示的数据个数

LEA SI,DATA ;数据的缓存区首地址

LOP3: MOV AX,[SI]

MOV DI,OFFSET BUFO

ADD DI,LENGTH BUFO

CALL DATCH

CALL DISP

ADD SI,2

LOOP LOP3

mov ah,1

int 21h

mov ax, 4c00h ;程序结束,返回到操作系统系统 int 21h

MAIN ENDP

CSEG ENDS

END MAIN

结果:

本文来源:https://www.bwwdw.com/article/zp24.html

Top