汇编:排序子程序

要求

在内部RAM30H开始的10个单元中连续存放着10个无符号随机数,编写一段程序,将这10个数中从大到小排列,存放在内部RAM40H开始的连续10个单元中。
将30H开头的10个单元格定义为TAB,将40H开头的10个单元格定义为TAB1。
思路是先将TAB中的数据复制到TAB1中,然后在进行冒泡排序。

代码:

DATAS SEGMENT
    ;此处输入数据段代码  
    ORG 0030H
    TAB DB 2,4,9,6,3,5,7,0,8,1
    ORG 0040H
    TAB1 DB 10 DUP(?)
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
    
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
    ;TAB中的数据复制到TAB1中
    MOV CL,10
    LEA SI,TAB
    LEA DI,TAB1
    XOR BX,BX 
LOP:MOV AX,[SI+BX]
    MOV [DI+BX],AX
    INC BX
    DEC CL
    JNZ LOP
    ;冒泡排序
    LEA SI, TAB1
    MOV CL, 10
    DEC CL
LP0:MOV BX, SI
	MOV CH, CL
	MOV AL, [BX]
LP1:INC BX
	CMP AL, [BX]
	JNC LP2
	XCHG AL, [BX]
LP2:DEC CH
	JNZ LP1
	MOV [SI], AL
	INC SI
	DEC CL
	JNZ LP0   
    ;冒泡排序结束
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

结果

初始时,TAB(0300)内的顺序为: 2,4,9,6,3,5,7,0,8,1。
DOS运行结果
运行结束时
TAB(0300)内的顺序仍为: 2,4,9,6,3,5,7,0,8,1。
TAB(0400)内为由大到小的排列顺序:9,8,7,6,5,4,3,2,1,0。
DOS运行结果

猜你喜欢

转载自blog.csdn.net/flakjsdfhjka/article/details/106955201