打印

[请问]请问_nop_(),_push_()是在哪里实现的? 不是问怎么使用

[复制链接]
3855|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sunhq02|  楼主 | 2011-9-22 21:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问_nop_(),_push_()是在哪里实现的?    不是问怎么使用

我很奇怪为什么 _push_()只能push特殊寄存器, 这个函数的代码在哪里?
为什么要做这样的限制
可不可以改写它? 或者仿造它的实现方式?

非常感谢

相关帖子

沙发
hificwc| | 2011-9-22 21:22 | 只看该作者
在INTRINS.H里

使用特权

评论回复
板凳
sunhq02|  楼主 | 2011-9-22 21:27 | 只看该作者
不是问它的头
我是想问它的实现

使用特权

评论回复
地板
hificwc| | 2011-9-22 21:34 | 只看该作者
#include "intrins.h"
_nop_();//把它看到一个函数来调用它啊,相当于汇编中的nop了

使用特权

评论回复
5
sunhq02|  楼主 | 2011-9-22 21:36 | 只看该作者
我汗!!!
我不是不会用它
我会用它

我的意思是  它的实现在哪里?
它的 汇编代码或者 C代码 在哪里?
我想知道它是如何实现的

使用特权

评论回复
6
hificwc| | 2011-9-22 21:39 | 只看该作者
你编译成功了,看反汇编就可以看到代码了。是由编译器实现的

使用特权

评论回复
7
yuyi21ic| | 2011-9-22 22:00 | 只看该作者
貌似是动态链接库。

使用特权

评论回复
8
sunhq02|  楼主 | 2011-9-23 08:12 | 只看该作者
那我们可不可以模拟它的实现方法呢?
我们可以用类似的方法写出类似功能的函数么
比如, 我想让 _push_()函数不再限制参数必须为SFR

使用特权

评论回复
9
ayb_ice| | 2011-9-23 08:22 | 只看该作者

使用特权

评论回复
10
sunhq02|  楼主 | 2011-9-23 08:39 | 只看该作者
首先,_push_()是个内联函数
如果我用常规方式写个类似功能的函数编译成库的话
用起来它还得lcall/ret
能不能做到_push_()那种程度呢

使用特权

评论回复
11
delin17| | 2011-9-23 08:43 | 只看该作者
你自己写一个命名一样的函数,就会使用你的函数了,不会去连接库里的函数了

使用特权

评论回复
12
sunhq02|  楼主 | 2011-9-23 08:49 | 只看该作者
不管怎么样  只要写成函数的格式
它总是会 lcall/ret
比较浪费

换个说法, 可不可以像写宏一样, 随意的在C代码里面插入汇编语句
或者类似的效果, 总之起到内联函数的效果
本来在C里面插入汇编还得开SRC, 还得写#pragma asm
_push_()也不知道怎么实现的,  就很方便
重点是生成的代码没有多余的

使用特权

评论回复
13
ayb_ice| | 2011-9-23 09:01 | 只看该作者
_push_是内联库函数,和一般的库函数是有区别的,
执行效率高,直接被替换成一条或几条汇编指令,
具体实现肯定和编译器有关,就是告诉编译器将某个SFR入栈而已,而SFR都是可以直接入栈的
那么就直接被替换成了push xxSFR汇编指令了,不影响其它任何东西,仅影响堆栈

使用特权

评论回复
14
sunhq02|  楼主 | 2011-9-23 09:03 | 只看该作者
那我们可以写内联库函数么
要怎么写?
我想实现类似的功能

用普通函数编译出来的代码很糟糕

使用特权

评论回复
15
ayb_ice| | 2011-9-23 09:35 | 只看该作者
C++支持内联函数,用inline关键字定义函数即可,声明也行
keil C51不支持

使用特权

评论回复
16
sunhq02|  楼主 | 2011-9-23 10:11 | 只看该作者
我也知道C51不支持内联
所以我才奇怪  _push_()到底是怎么实现的

使用特权

评论回复
17
ayb_ice| | 2011-9-23 10:18 | 只看该作者
我也知道C51不支持内联
所以我才奇怪  _push_()到底是怎么实现的
sunhq02 发表于 2011-9-23 10:11

都说了是编译器实现的
难道你想写编译器程序

使用特权

评论回复
18
sunhq02|  楼主 | 2011-9-23 11:00 | 只看该作者
:L

使用特权

评论回复
19
xwj| | 2011-9-23 11:00 | 只看该作者
不要用汇编的思想来写C程序!
在C的层面,根本就不该考虑_push_()。

真正要想极限优化的话,应该用汇编文件asm/a51,个别语句的话也可以用嵌入汇编

使用特权

评论回复
20
sysdriver| | 2011-9-23 12:32 | 只看该作者
怎么有点躲躲藏藏的意思,你用这个_push_()到底想干嘛?说出来也许大家能解决。

因为C语言中,如果不是特殊情况,最好不要push和pop的操作。

使用特权

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

本版积分规则

4

主题

522

帖子

1

粉丝