打印

是否在我切换寄存器组的时候出现了问题?

[复制链接]
730|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
llia|  楼主 | 2022-4-10 23:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
编写KeilC程序的时候,有个汇编子程序是这样调用的

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

我在程序跑的过程中结果发现结果有误,以确认非主功能的问题,而且单步调试的时候结果也正常。这个bug出现特别随机和罕见,所以想问下各位大神,是否在我切换寄存器组的时候出现了问题?

使用特权

评论回复
沙发
dingy| | 2022-4-10 23:30 | 只看该作者
其他地方使用到第3组寄存器了?

使用特权

评论回复
板凳
llia|  楼主 | 2022-4-10 23:33 | 只看该作者
肯定没有

使用特权

评论回复
地板
jlyuan| | 2022-4-10 23:36 | 只看该作者
是否换了USING会好些??

使用特权

评论回复
5
llia|  楼主 | 2022-4-10 23:39 | 只看该作者
我也想知道

使用特权

评论回复
6
xxrs| | 2022-4-10 23:42 | 只看该作者
如果在KeilC中要在不同子程序之间调用时,除去传递参数的那几个Rn寄存器之外,是否可以使用剩余的Rn寄存器做中间变量?

使用特权

评论回复
7
jiajs| | 2022-4-10 23:46 | 只看该作者
寄存器组不要随意切换,使用不当会出问题的

使用特权

评论回复
8
jlyuan| | 2022-4-10 23:49 | 只看该作者
如果C程序在.c而汇编在.asm中

使用特权

评论回复
9
llia|  楼主 | 2022-4-10 23:51 | 只看该作者
对啊,我看反汇编的时候感觉Rn用的特别随意,所以不大敢放开了用,怕影响到别的地方出现bug

使用特权

评论回复
10
llljh| | 2022-4-10 23:53 | 只看该作者
中断会用到。

使用特权

评论回复
11
dengdc| | 2022-4-10 23:56 | 只看该作者

是的, 你的软件想在中断中使用另外的寄存器组. 就得用 using 告诉编译器. 形如:

void int0_isr(void) interrupt 0 using 1;

使用特权

评论回复
12
jiajs| | 2022-4-10 23:58 | 只看该作者
中断中你无需修改 RSx, 编译器会知道怎么处理它. 当然如果是汇编那你还得处理.

使用特权

评论回复
13
wyjie| | 2022-4-11 21:52 | 只看该作者
嗯,using 还告诉编译器 08~1F 的某些地址被寄存器组用掉了, 编译的时候不要再使用这块地址了, 这里是产生你的不可捉摸 bug 的关键.

使用特权

评论回复
14
pengf| | 2022-4-11 21:57 | 只看该作者
不会用,强烈建议不用

使用特权

评论回复
15
llia|  楼主 | 2022-4-11 21:59 | 只看该作者
好的,我明天去单位试一下,多谢各位大侠了哈

使用特权

评论回复
16
tpgf| | 2022-5-4 08:33 | 只看该作者
楼主这个是在设置寄存器吗

使用特权

评论回复
17
nawu| | 2022-5-4 08:45 | 只看该作者
改用c语言好了

使用特权

评论回复
18
zljiu| | 2022-5-4 08:57 | 只看该作者
地址操作非常小心

使用特权

评论回复
19
gwsan| | 2022-5-4 09:38 | 只看该作者
不小心给覆盖了

使用特权

评论回复
20
qcliu| | 2022-5-4 09:54 | 只看该作者
怎么能看出来用的随意呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

961

主题

8893

帖子

4

粉丝