51单片机,可以通过汇编语言获取当前pc值吗
答案:2 悬赏:50 手机版
解决时间 2021-03-26 08:38
- 提问者网友:聂風
- 2021-03-25 23:42
51单片机,可以通过汇编语言获取当前pc值吗
最佳答案
- 五星知识达人网友:夜余生
- 2021-03-26 00:54
不能,因PC寄存器是不可读的。
只有在响应中断或调用子程序,才将PC值即断点地址入栈保护,这时读堆栈数据可获取断点地址。但是,想随时获取PC值是不能的。追问可以先改变sp内值再调用RET指令使sp赋值给pc再把sp内值pop出来推得pc值吗追答先改变sp内值,就是执行RET指令后返回的假断点地址,这是可以的,但这地址必须是主程序主循环入口或0000H,否则,可能破坏执行程序的顺序,造成飞程序,反倒弄巧成拙了。所以,不要随便用这方法。但现在最关键问题是,什么时候这么做,这不是当断电时就可以执行的。就是那什么时侯,怎么才能去执行RET指令,只有在子程序中,最后放RET指令。可问题还是断电时,怎么就那么恰,在子程序中呢?你这不是自找麻烦,庸人自扰吗?结论,这种想法不可行,太荒唐!追问十分感谢您的回答 由于我是刚入门单片机 老师的问题只想让我们了解51的指令而已 还没到深入的地步 如果仅仅要完成获取任一个pc值 代码要如何写追答没有获取PC值的代码,也做不到,因PC是不可读的。为什么和PC较劲?那么内容和寄存器不学,总钻牛角尖?追问因为老师的作业的问题就是怎么得到pc值。。。我也不想死扣这个问题。pc本来就不可寻址我也知道。难受。。。追答只有调子程序或中断时,得到PC的断点地址也许是得到sp的值?是你记错啦老师怎么会留这样的问题?
只有在响应中断或调用子程序,才将PC值即断点地址入栈保护,这时读堆栈数据可获取断点地址。但是,想随时获取PC值是不能的。追问可以先改变sp内值再调用RET指令使sp赋值给pc再把sp内值pop出来推得pc值吗追答先改变sp内值,就是执行RET指令后返回的假断点地址,这是可以的,但这地址必须是主程序主循环入口或0000H,否则,可能破坏执行程序的顺序,造成飞程序,反倒弄巧成拙了。所以,不要随便用这方法。但现在最关键问题是,什么时候这么做,这不是当断电时就可以执行的。就是那什么时侯,怎么才能去执行RET指令,只有在子程序中,最后放RET指令。可问题还是断电时,怎么就那么恰,在子程序中呢?你这不是自找麻烦,庸人自扰吗?结论,这种想法不可行,太荒唐!追问十分感谢您的回答 由于我是刚入门单片机 老师的问题只想让我们了解51的指令而已 还没到深入的地步 如果仅仅要完成获取任一个pc值 代码要如何写追答没有获取PC值的代码,也做不到,因PC是不可读的。为什么和PC较劲?那么内容和寄存器不学,总钻牛角尖?追问因为老师的作业的问题就是怎么得到pc值。。。我也不想死扣这个问题。pc本来就不可寻址我也知道。难受。。。追答只有调子程序或中断时,得到PC的断点地址也许是得到sp的值?是你记错啦老师怎么会留这样的问题?
全部回答
- 1楼网友:西风乍起
- 2021-03-26 01:48
MCS-51单片机汇编语言程序设计 - 讲义教程 - 道客巴巴
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯