| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4695 人关注过本帖
标题:汇编语言排序还有RET返回问题
取消只看楼主 加入收藏
蓝然籽
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2015-4-10
结帖率:40%
收藏
已结贴  问题点数:10 回复次数:4 
汇编语言排序还有RET返回问题
ORG 0000h
LJMP MAIN
ORG 0003h
MAIN:
MOV 30H,#02h
MOV 31H,#08h
MOV 32H,#06H
N EQU 03h
MOV r0,#30H
sort:
MOV A,r0
MOV r1,A
MOV r5,#N
CLR F0
DEC r5
MOV A,@r1
LOOP:
MOV r3,A
INC r1
MOV A,r1
CLR C
MOV A,@r1
SUBB A,r3
JNC LOOP1
SETB F0
MOV A,r3
XCH A,@r1
DEC r1
XCH A,@r1
INC r1
LOOP1:
MOV A,@r1
DJNZ r5,LOOP
JB F0,sort
RET
END
假设按递增顺序先排30H,31H,32H中的三个数,排完之后不是应该结束程序吗?为什么又返回sort了?
而且还有一个疑问:遇见RET是是返回子函数呢?还是返回主函数?为什么每次遇见RET都先返回子函数的第一条指令,再执行就回主函数,就是出不了程序了?
搜索更多相关主题的帖子: 而且 
2015-05-06 09:24
蓝然籽
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2015-4-10
收藏
得分:0 
回复 3楼 取名字
恩,我单步的时候也发现了,这是我在书上弄下来的一段程序。然后我就不用F0了。改了之后能排序,但是遇到RET就又回 LJMP MAIN这里了,那我下面的想把中值输出就没办法进行了。我改的程序:
ORG 0000h
LJMP MAIN
ORG 0003h
MAIN:
MOV 30H,#03h
MOV 31H,#08h
MOV 32H,#02H
MOV 33H,#09H
MOV 34H,#034H
MOV 35H,#023H
N EQU 06h
MOV r0,#30H
MOV r5,#(N-1)
MOV r6,#(N-1)
sort:
 MOV A,r0
 MOV r1,A
 MOV A,@r1

LOOP:
 MOV r3,A
 INC r1
 CLR C
 MOV A,@r1
 SUBB A,r3
 JNC LOOP1
 MOV A,r3
 XCH A,@r1
 DEC r1
 XCH A,@r1
 INC r1
LOOP1:
 MOV A,@r1
 DJNZ r5,LOOP
 MOV B,r6
 MOV r5,B
 DEC r5
 DJNZ r6,sort
RET
MOV r0,#32H
MOV A,@r0
END
请问怎样再改,才能再往下执行?真是汇编初学,什么都不会啊!谢谢~
2015-05-08 22:01
蓝然籽
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2015-4-10
收藏
得分:0 
回复 2楼 wmf2014
这个是不是8031我也不知道……反正就是刚学汇编,看着书上的一段程序就试了下,发现只弄来一小段程序看看还可以,一自己弄成整个的就都是问题,我改过的程序还有问题回复在了三楼里,麻烦版主帮我看一下,谢谢啊~
2015-05-08 22:04
蓝然籽
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2015-4-10
收藏
得分:0 
回复 9楼 wmf2014
这个就是51单片机的,我想起来了……
2015-05-11 17:51
蓝然籽
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2015-4-10
收藏
得分:0 
回复 7楼 取名字
如果不做子程序的话,我去掉了ret,单步执行到MOV A,@r0,就开始提示错误了啊。如果做子程序的话,不管我把ret放哪里,最后还是会再返回到LJMP MAIN,最后还是到不了END啊……怎么就是退出不了程序了?
2015-05-11 17:57
快速回复:汇编语言排序还有RET返回问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011964 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved