找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5443|回复: 1
打印 上一主题 下一主题
收起左侧

[求助]c51中断程序寄存器组切换的机理?

[复制链接]
跳转到指定楼层
楼主
ID:19977 发表于 2009-12-12 13:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

在用c语言写中断程序时,当使用using m切换寄存器组时,小弟有如下疑问或思考,不正确处望指点:

一、如不加using语句时,也就是使用默认的寄存器组0,R0~R7(对应RAM内00h~07h),当中断程序用到了其中的寄存器作参数传递时,R0~R7全部入栈,如调用printf()函数;否则。不入栈。

二,若使用using 0,由于默认的寄存器组就是0号,这是不是多余的呢?

三、若使用using 1,则此时R0~R7对应于08h~0Fh,现在的R0~R7要不要入栈;另外堆栈指针也在此区域,会不会有冲突?

 

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:27770 发表于 2011-1-14 13:34 | 只看该作者

51 的 4 组 R0--R7,使用时的确要注意,否则,带来的后果不可思议!

如果,中断之前是使用 RAM 0 组的,那么,在中断里, R0--R7 如果没有切换 RAM 0, R0--R7 也被使用,原来的数据就会被改写, R0~R7 全部入栈则可以还原原来的数据.

如果你进入中断后,切换了 RAM 0 到 RAM 1(2,3),这时, 原来的 R0~R7 不用入栈.中断里使用的 R0--R7 虽然名称相同,但是物理上 RAM 是不同的.

随着中断返回,状态寄存器的 RS1,RS0 会出栈,(如果已经入栈保护),那么,你无需中断结束后切换 RAM 1 到 RAM 0 .-----中断返回后会自动指向 RAM 0 .

仅供参考!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表