登陆
|
注册
|
搜索
|
最近新帖
发帖子
|
共享我的资料
|
精华帖子
|
热门话题
导航:
老古网
→
老古论坛
→
XMOS公共讨论区
→
XMOS开源项目区
→
单片机程序设计
→
嵌入式系统
→
广告区域
→
→帮帮忙,关于子程序[fansuyan]
*第14349篇: 帮帮忙,关于子程序
楼 主:
fansuyan
2003年7月11日14:51
帮帮忙,关于子程序
我有问题请您帮忙,是关于子程序的结束问题,假如有这样一条指令lcall
jsxl,这是调用子程序,而在jsxl子程序中间
还有ljmp
m1,在m1结束的时候有ret,那等程序执行到m1结束的ret,那您说这个调用lcall
jsxl结束了吗,
第
2
楼:
我是一条鱼
2003年7月11日15:28
我回答你
我有问题请您帮忙,是关于子程序的结束问题,假如有这样一条指令lcall jsxl,这是调用子程序,而在jsxl子程序中间 还有ljmp m1,在m1结束的时候有ret,那等程序执行到m1结束的ret,那您说这个调用lcall jsxl结束了吗,
在m1结束的时候,执行RET后,它就回到 jsxl,继续执行直到jsxl结束,这个lcall jsxl才算结束。
第
3
楼:
Lichunfu
2003年7月12日08:42
回答错误!
当程序执行到M1结束的RET时,CPU会把当时栈顶的两字节数据弹出到PC(针对51系列),如果在进入子程序JSXL后到M1的RET指令时没有做过压栈,或者压入的数据已经弹出,那么此时栈顶内容应该是指令LCALL JSXL后面将要执行的指令地址,也就是说程序执行了RET语句后,PC已经指向LCALL JSXL后面的语句,故LCALL JSXL已经结束。不信你可以用仿真软件执行一下就知道了。
第
4
楼:
luz
2003年7月14日13:57
同意,
小鱼同学搞错嘞。
不过这样很
同意,
小鱼同学搞错嘞。
不过这样很容易出错哦,其他进栈的东东都出不来了。
第
5
楼:
xdkjason
2003年7月15日12:05
能告诉我在什么情况下会出错吗?
第
6
楼:
我是一条鱼
2003年7月15日09:34
我真的搞错了
不好意思,我错了,我对 LCALL 指令过程中的堆栈和压栈不是很明白,所以出错了。谢谢大家批评指正。
第
7
楼:
xdkjason
2003年7月15日12:05
仔细看一下执行RET时有那些操作。
第
8
楼:
guest
2003年7月15日17:30
如果不需要数据保护的话, 没有问题。
如果不需要数据保护的话,就不会出问题。
我以前用PIC16C711做过一个项目,时间要求很严格。我于是在中断里面用了3个RETI分支,程序跑到现在我也没有听技术支持的同事说有问题。
第
9
楼:
luz
2003年7月15日18:14
不管怎样,进入中断后遇到RET命令一定可
不管怎样,进入中断后遇到RET命令一定可以返回的,因为ret命令就是把程序指针弹出来嘛,但是一定要把压栈的数据逐一退出,如果用jmp命令容易遗漏进栈的数据,我个人的习惯是一个中断只留一个ret,其余分支都在执行完后跳传到出栈的地方
>>>>>>对该主题发表你的看法
本主题贴数
9
,分页:
[第1页]
[上一篇主题]:
各位哥哥姐姐谁能告诉我在哪里能买到连PC机PS2口的带液晶屏的小键盘----拜托!!!!!!!!
[下一篇主题]:
[求助]