这句话怎么理解呢?

[复制链接]
2468|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使用过的临时寄存器。就这个意思。
 楼主| Hello_LeeHom 发表于 2011-2-12 12:09 | 显示全部楼层
楼上的哥哥、keil老大说干脆不用了。所以A不能用 B使用过的临时寄存器。这句话是什么意思?
sdpz 发表于 2011-2-12 13:13 | 显示全部楼层
啊,今天病得不轻啊。
我的废话误导了你不好意思。
斟酌1楼的话,只是说在调用前不用寄存器保存有用数据,在返回后就可以随便用。多简单的意思啊,还要想多复杂。。。我想死。。。还有种情况是它能够不用这些寄存器进行运算的,只用RAM。
闪人~~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

126

帖子

1

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