一个8051汇编的递归程序,不知道写的对不对,请高手赐教

overmind 2012-02-09 10:02:51

main:
mov r0,#04h
acall AddFunction
ajmp GotoEnd

AddFunction:
dec r0
inc r1
cjne r0,#0,CallAddFunction
ret

CallAddFunction:
acall AddFunction
ret

GotoEnd:
end

我想看看他递归到底能到什么程度,然后我把r0初值赋成了#0ffh,结果如图,是不是意味着堆栈溢出了?

我还特别想看看RAM中的堆栈长什么样子,是如何变化的,请问能在uVision里面看到么?
请高手赐教!!!谢谢!!!
...全文
113 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2012-02-11
  • 打赏
  • 举报
回复
不像是 sp 问题,因为只递归4次(3*4=12字节)。好像:
GotoEnd:
end
改:
GotoEnd:
jmp GotoEnd
end
  • 打赏
  • 举报
回复
正确[Quote=引用 5 楼 bjtea 的回复:]
C51的堆栈特殊,才会有重入(reentrant)问题。这里是汇编,不应是重入问题。
堆栈的初始值为07,现在已经到0xff了。8051如果超过0x7f(8052是0xff),就溢出了。
[/Quote]
lbing7 2012-02-09
  • 打赏
  • 举报
回复
好像是不可重入的问题

woshi_ziyu 2012-02-09
  • 打赏
  • 举报
回复
程序跑飞了吧
bjtea 2012-02-09
  • 打赏
  • 举报
回复
C51的堆栈特殊,才会有重入(reentrant)问题。这里是汇编,不应是重入问题。
堆栈的初始值为07,现在已经到0xff了。8051如果超过0x7f(8052是0xff),就溢出了。
overmind 2012-02-09
  • 打赏
  • 举报
回复
请问什么是不可重入的问题 ?
[Quote=引用 2 楼 lbing7 的回复:]

好像是不可重入的问题
[/Quote]
overmind 2012-02-09
  • 打赏
  • 举报
回复
对的 sp一路增加上去 之后 ff就无法压栈了 是不是就算跑飞了?
[Quote=引用 1 楼 woshi_ziyu 的回复:]

程序跑飞了吧
[/Quote]

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧