打印

这句话怎么理解呢?

[复制链接]
1946|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Hello_LeeHom|  楼主 | 2011-2-12 10:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Keil C51编译器在编译C语言程序时,如果发现一个函数调用了一个外部函数,就认为这个函数返回时,R0~R7、ACC、B、PSW、DPH和DPL等寄存器已经变化。因此,它不会在调用这个函数前用这些寄存器保存有用数据,外部函数返回时这些寄存器是什么值都不影响程序执行。
这句话怎么理解呢?哪位大虾能帮忙解答一下吗?3Q了!

相关帖子

沙发
coody| | 2011-2-12 11:04 | 只看该作者
程序执行,只要PC不乱,就能执行。编译器会处理R0~R7、ACC、B、PSW、DPH和DPL等寄存器,不用你操心,这些是公用寄存器而已

使用特权

评论回复
板凳
ayb_ice| | 2011-2-12 11:29 | 只看该作者
如果用C就不用考虑这些了
这个其实是编译器的编译原则(对寄存器的分配使用原则,通常编译器必须有个固定的原则,这样才能各个模块分开编译,最后连接,不会也问题,纯汇编由编程者自己决定如何分配使用,简单方便,但不方便交流,好的汇编一般也遵循这个原则),其它编译器也基本是这样做的,这个在混合编程的时候很有用
好的汇编程序也要有固定合理的原则

使用特权

评论回复
地板
sdpz| | 2011-2-12 11:42 | 只看该作者
一时语塞了。。。我觉得keil说的很明白了。。。
转述的话。。。简单的说。。。我想不到了。。。
比方说。。。A调用了B,如果A在调用B前,用B使用的寄存器来保存数据的话,那么在执行B的时候,因为B也要用这些寄存器,以至于刚才保存的数据就被破坏掉了。有两个办法解决
1.调用B之前保存寄存器的值,在B返回后恢复它们
2.keil老大说干脆不用了。所以A不能用 B使用过的临时寄存器。就这个意思。

使用特权

评论回复
5
Hello_LeeHom|  楼主 | 2011-2-12 12:09 | 只看该作者
楼上的哥哥、keil老大说干脆不用了。所以A不能用 B使用过的临时寄存器。这句话是什么意思?

使用特权

评论回复
6
sdpz| | 2011-2-12 13:13 | 只看该作者
啊,今天病得不轻啊。
我的废话误导了你不好意思。
斟酌1楼的话,只是说在调用前不用寄存器保存有用数据,在返回后就可以随便用。多简单的意思啊,还要想多复杂。。。我想死。。。还有种情况是它能够不用这些寄存器进行运算的,只用RAM。
闪人~~~~~

使用特权

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

本版积分规则

0

主题

126

帖子

1

粉丝