
实验一、数据排序实验一、实验目的熟悉8031指令系统,掌握程序设计方法。二、实验内容编写并调试一个排序子程序,其功能为用冒泡法将内部RAM中几个单元字节无符号的正整数,按从小到大的次序重新排列。三、实验程序框图NNN四、实验步骤1把8032片内RAM区50H—5AH中放入不等的数据(用寄存器读写方法)。2用连续运行方式从起始地址0100H开始运行程序(输入0100后按EXEC键)。3排序结束,显示“P.”。4用寄存器读写方法检查50—5AH中内容应从小到大排列。五、参考程序DORDE:MOVSP,#60H设置栈指针MOVR3,#50HDORDE1:MOVA,R3MOVR0,A数据指针传送到R0MOVR7,#0AH长度送到R7CLR00H清零标志位MOVA,@R0DORDE2:INCR0MOVR2,ACLRC清零进位标志MOV22H,@R0CJNEA,22H,DORDE3是否相等SETBCDORDE3:MOVA,R2JCDORDE4小于或等于不交换SETB00HXCHA,@R0DECR0XCHA,@R0大于交换位置INCR0DORDE4:MOVA,@R0DJNZR7,DORDE2JB00H,DORDE1未完继续MOVR0,#7EH完,关显示器前三位MOVA,#0FFHMOVR4,#06HDORDE5:MOV@RO,ADECR0DJNZR4,DORDE5MOV7EH,#0CH
#include<stdio.h>
#include
<time.h>
#include
<stdlib.h>
void
Swap(int*
a,
int*
b)
//
交换
{
int
t
t
=
*a
*a
=
*b
*b
=
t
}
void
AsceSort(int*
begin,
int*
end)
//
升序排序
{
for(int*
p
=
begin
p
!=
end)
if(p
==
begin
||
*(p-1)
<=
*p)
++p
else
Swap(p---1,
p)
}
void
DescSort(int*
begin,
int*
end)
//
降序排序
{
for(int*
p
=
begin
p
!=
end)
if(p
==
begin
||
*(p-1)
>=
*p)
++p
else
Swap(p---1,
p)
}
void
Print(int*
a,
int
n)
//
10个一行输出
{
int
i
for(i
=
0
i
<
n
++i)
{
if(i
!=
0
&&
i
%
10
==
0)
putchar('\n')
printf("%4d
",
a[i])
}
putchar('\n')
}
#define
N
1000
int
main()
{
int
a[N],
i
srand(time(0))
for(i
=
0
i
<
N
++i)
a[i]
=
rand()
%
1001
+
1
puts("整理前排列:")
Print(a,
N)
puts("递增排列:")
AsceSort(a,
a
+
N)
Print(a,
N)
puts("递减排列:")
DescSort(a,
a
+
N)
Print(a,
N)
return
0
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)