要求
在内部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。
运行结束时
TAB(0300)内的顺序仍为: 2,4,9,6,3,5,7,0,8,1。
TAB(0400)内为由大到小的排列顺序:9,8,7,6,5,4,3,2,1,0。