切换寄存器组的时候出现了问题?

[复制链接]
896|13
 楼主| renyaq 发表于 2015-8-18 19:22 | 显示全部楼层 |阅读模式
编写KeilC程序的时候,有个汇编子程序是这样调用的

SETB RS0
SETB RS1
;主功能XXXXXXXXX
CLR RS0
CLR RS1

我在程序跑的过程中结果发现结果有误,以确认非主功能的问题,而且单步调试的时候结果也正常。这个bug出现特别随机和罕见,所以想问下各位大神,是否在我切换寄存器组的时候出现了问题?
supernan 发表于 2015-8-18 19:23 | 显示全部楼层
其他地方使用到第3组寄存器了?
 楼主| renyaq 发表于 2015-8-18 19:24 | 显示全部楼层
肯定没有
栩栩如生 发表于 2015-8-18 19:24 | 显示全部楼层
是否换了USING会好些??
 楼主| renyaq 发表于 2015-8-18 19:24 | 显示全部楼层
我也想知道
houcs 发表于 2015-8-18 19:24 | 显示全部楼层
如果在KeilC中要在不同子程序之间调用时,除去传递参数的那几个Rn寄存器之外,是否可以使用剩余的Rn寄存器做中间变量?
houcs 发表于 2015-8-18 19:24 | 显示全部楼层
如果C程序在.c而汇编在.asm中
 楼主| renyaq 发表于 2015-8-18 19:25 | 显示全部楼层
对啊,我看反汇编的时候感觉Rn用的特别随意,所以不大敢放开了用,怕影响到别的地方出现bug
liuzaiy 发表于 2015-8-18 19:25 | 显示全部楼层
中断会用到。
yinxiangh 发表于 2015-8-18 19:25 | 显示全部楼层
是的, 你的软件想在中断中使用另外的寄存器组. 就得用 using 告诉编译器. 形如:

void int0_isr(void) interrupt 0 using 1;
pangb 发表于 2015-8-18 19:25 | 显示全部楼层
中断中你无需修改 RSx, 编译器会知道怎么处理它. 当然如果是汇编那你还得处理.
yinxiangh 发表于 2015-8-18 19:26 | 显示全部楼层
嗯,using 还告诉编译器 08~1F 的某些地址被寄存器组用掉了, 编译的时候不要再使用这块地址了, 这里是产生你的不可捉摸 bug 的关键.
chenjunt 发表于 2015-8-18 19:26 | 显示全部楼层
不会用,强烈建议不用
 楼主| renyaq 发表于 2015-8-18 19:27 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

700

主题

10138

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部