题目要求:在从1000H开始存有32H个正数,现在将其从小到大排序,并将排序结果存于2000H开始的片外存储器中。
请各位高手帮我看一下这段代码。
1000H
START:
MOV R3, #00H
…… …… ;细节略
END
这程序是否正确,不正确的话顺便帮我改一下。
悬赏分:100 - 解决时间:2009-12-15 22:44
----------------------------------------
最佳答案:
;改好了,仿真实验成功。
ORG 0000H
START:
MOV A, #48H
MOV DPTR, #1000H
MOV R7, #32H
UU:
MOVX @DPTR, A
INC DPTR
DEC A
DJNZ R7, UU
;---------------上面各条,从1000H开始,存放了一批递减的数据
CALL X_SORT ;调用排序子程序
NOP ;上面数据即递增排好
CALL M_XRAM ;调用移动子程序
NOP ;按照要求,移动到2000H
SJMP $
;---------------下面是排序子程序
X_SORT:
MOV R7, #32H
ZZ:
MOV 2AH, R7
MOV DPTR, #1000H ;前一数字的地址
SS:
MOVX A, @DPTR ;取出前一个数字
MOV 2BH, A ;保存前一数字
MOV R6, DPL ;保存前一数字的地址到R6
INC DPTR
MOVX A, @DPTR ;取出后一个数字
CJNE A, 2BH, $ + 3
JC KK
MOV DPL, R6 ;恢复前一地址
MOVX @DPTR, A ;保存后一数字
MOV A, 2BH ;找回前一数字
INC DPTR ;后一地址
MOVX @DPTR, A ;保存
KK:
DJNZ 2AH, SS
DJNZ R7, ZZ
RET
;---------------排序结束-下面是移动子程序
M_XRAM:
MOV DPL, #00H
MOV R7, #32H
M_LOOP:
MOV DPH, #10H ;从1000H
MOVX A, @DPTR ;取出
MOV DPH, #20H ;到2000H
MOVX @DPTR, A ;复制
INC DPTR
DJNZ R7, M_LOOP
RET
END
--------------------------------------
回答者: 做而论道 - 十一级 2009-12-15 00:29
提问者对于答案的评价:非常感谢你。
原题网址:http://zhidao.baidu.com/question/129408332.html
--------------------------------------