51单片机汇编语言-请编写程序将内部RAM 40H到4FH 中的16个数据按从小到大顺序重新排列。 尽量简单一点的

单片机高手编个小程序不难吧... 单片机高手编个小程序不难吧 展开
 我来答
hhu月光大侠
推荐于2017-09-14 · 测测控控-CPU/PLC/传感器
hhu月光大侠
采纳数:303 获赞数:1997

向TA提问 私信TA
展开全部
冒泡排序程序如下:

ORG 0000H
LCALL SORT ; 跳转到排序程序
SJMP $ ; 。
SORT: ; 数据冒泡排序程序
MOV R6, #16 ;参加排序数据的总个数
DEC R6 ; 比较次数 比 数据总数 少 1

L1:
MOV R0, #40H ; 把数据的起始地址40h付给R0
MOV A, R6 ;调整比较次数
MOV R7, A
CLR F0 ; 清交换标志

L2: ;比较
MOV A, @R0 ; 取前一个数启知
INC R0
MOV B, @R0 ; 取后一个数
CJNE A, B, L3 ; 前面的数 与 后面的数 比较, 前-后

L3: ;判断、处理
JC N_JH ; 后面的伏薯数 大于 前面的数,不交换
XCH A,B ; 否则前后两数交换存放
MOV @R0,缺旁者A
DEC R0
MOV @R0,B
INC R0
SETB F0 ; 设交换标志

N_JH:
DJNZ R7, L2 ; 没有比较完,就继续
JNB F0, L_END ; 没有交换过,就结束
DJNZ R6, L1

L_END:
RET ; 排序完成。

;结果是:
;40H中存放着最小的数;
;4FH中存放着最大的数。
匿名用户
2013-11-24
展开全部
见过别的网友写的汇编冒泡法,你自己参考修改吧
/宽顷////////////////////////////////////////////////////////////////////////////////////
汇编冒泡排序(51)(需调试器付初值)
;此程序属于冒泡排序算法,不能用查找表(只能在调试时用内存表中设置处置进行仿真实验)(因为查找表是数据是存放在rom中的,所以说是无法去修改的,无能为力,因此只能通过调试来实现)
Num EQU 31H ;定义临时次数变量(也可理解为总数据变量)

ORG 0000H
LCALL START ;跳转到排序算法
SJMP $ ;如果排序完成,在此循环

START:MOV R0,#50H;把地址0050h付给R0中
MOV Num,#4 ;所有数据个数放在Num中
CLR F0 ;用户可以使用的标志位清零(交换数据慎旁陆标志)
DEC Num ;减1
MOV A,@R0 ;把其中的数送到A中

LOOP: MOV R2,A ;把低字节地址中的数付给R2
INC R0 ;地址加一
CLR C ;进位标志位清零
MOV A,@R0 ;把高字节地启汪址中的数付给A
SUBB A,R2 ;带进位相减指令
JNC LOOP1 ;如果没有借位,则高字节中比低字节中数据大,不用排,跳转到loop1

;如果借位,下面是交换数据代码
SETB F0 ;用户可以使用的标志位置1
MOV A,R2
XCH A,@R0 ;把低字节数送到高字节地址中
DEC R0 ;地址减1,到低字节地址中
XCH A,@R0 ;把高字节中的数送到低字节地址中
INC R0 ;在把地址重新加一

LOOP1:MOV A,@R0
DJNZ Num,LOOP ;重新进入下次循环(跳出时,实现一次冒泡)

JB F0,START ;循环进行冒泡,如果交换标志一直为0,则排序完成,结束
RET

END
追问
其实我如果会修改的话,我就能自己编了,大神
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2013-11-24 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式