在片外RAM存储器的8850H~8860H单元各存放有一个8位无符号整数,找出这批数据的中数。

在片外RAM存储器的8850H~8860H单元各存放有一个8位无符号整数,找出这批数据的中数。请先将这批数按升序排序,中间位置的那个数据就是中数,将它存入片内数据存储器的30H单元。

万分感谢!!!

代码如下,请你参考:

ORG  0000H
AJMP MAIN

ORG 0030H
MAIN:
MOV SP,#60H
M0:
CLR F0 ;排序结束标识
MOV DPTR,#8850H
MOV R7,#10H ;8850H~8860H总共11H个单元,每次冒泡需要比较10H次
M1:
MOVX A,@DPTR
MOV R6,A ;去前数,并保存到R6
INC DPTR
MOVX A,@DPTR
MOV R5,A ;去后数,并保存到R5
CLR C
SUBB A,R6
JNC NEXT ;后数减前数,C位为0,说明后数比前数大,不需要交换,
SETB F0 ;否则,前后数交换,置F0为1,说明有交换
MOV A,R5
DEC DPL
MOVX @DPTR,A
MOV A,R6
INC DPL
MOVX @DPTR,A
NEXT:
DJNZ R7,M1
JB F0,M0 ;F0为1说明有交换,还得进行一次冒泡,否则冒泡结束

MOV DPTR,#8858H
MOVX A,@DPTR
MOV 30H,A
SJMP $

END

希望对你有所帮助!!!!!

追问

请问为什么要有MOV SP,#60H

温馨提示:答案为网友推荐,仅供参考
相似回答