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

[复制链接]
5469|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了
 楼主| sunhq02 发表于 2011-9-22 21:36 | 显示全部楼层
我汗!!!
我不是不会用它
我会用它

我的意思是  它的实现在哪里?
它的 汇编代码或者 C代码 在哪里?
我想知道它是如何实现的
hificwc 发表于 2011-9-22 21:39 | 显示全部楼层
你编译成功了,看反汇编就可以看到代码了。是由编译器实现的
yuyi21ic 发表于 2011-9-22 22:00 | 显示全部楼层
貌似是动态链接库。
 楼主| sunhq02 发表于 2011-9-23 08:12 | 显示全部楼层
那我们可不可以模拟它的实现方法呢?
我们可以用类似的方法写出类似功能的函数么
比如, 我想让 _push_()函数不再限制参数必须为SFR
ayb_ice 发表于 2011-9-23 08:22 | 显示全部楼层
 楼主| sunhq02 发表于 2011-9-23 08:39 | 显示全部楼层
首先,_push_()是个内联函数
如果我用常规方式写个类似功能的函数编译成库的话
用起来它还得lcall/ret
能不能做到_push_()那种程度呢
delin17 发表于 2011-9-23 08:43 | 显示全部楼层
你自己写一个命名一样的函数,就会使用你的函数了,不会去连接库里的函数了
 楼主| sunhq02 发表于 2011-9-23 08:49 | 显示全部楼层
不管怎么样  只要写成函数的格式
它总是会 lcall/ret
比较浪费

换个说法, 可不可以像写宏一样, 随意的在C代码里面插入汇编语句
或者类似的效果, 总之起到内联函数的效果
本来在C里面插入汇编还得开SRC, 还得写#pragma asm
_push_()也不知道怎么实现的,  就很方便
重点是生成的代码没有多余的
ayb_ice 发表于 2011-9-23 09:01 | 显示全部楼层
_push_是内联库函数,和一般的库函数是有区别的,
执行效率高,直接被替换成一条或几条汇编指令,
具体实现肯定和编译器有关,就是告诉编译器将某个SFR入栈而已,而SFR都是可以直接入栈的
那么就直接被替换成了push xxSFR汇编指令了,不影响其它任何东西,仅影响堆栈
 楼主| sunhq02 发表于 2011-9-23 09:03 | 显示全部楼层
那我们可以写内联库函数么
要怎么写?
我想实现类似的功能

用普通函数编译出来的代码很糟糕
ayb_ice 发表于 2011-9-23 09:35 | 显示全部楼层
C++支持内联函数,用inline关键字定义函数即可,声明也行
keil C51不支持
 楼主| sunhq02 发表于 2011-9-23 10:11 | 显示全部楼层
我也知道C51不支持内联
所以我才奇怪  _push_()到底是怎么实现的
ayb_ice 发表于 2011-9-23 10:18 | 显示全部楼层
我也知道C51不支持内联
所以我才奇怪  _push_()到底是怎么实现的
sunhq02 发表于 2011-9-23 10:11

都说了是编译器实现的
难道你想写编译器程序
 楼主| sunhq02 发表于 2011-9-23 11:00 | 显示全部楼层
xwj 发表于 2011-9-23 11:00 | 显示全部楼层
不要用汇编的思想来写C程序!
在C的层面,根本就不该考虑_push_()。

真正要想极限优化的话,应该用汇编文件asm/a51,个别语句的话也可以用嵌入汇编
sysdriver 发表于 2011-9-23 12:32 | 显示全部楼层
怎么有点躲躲藏藏的意思,你用这个_push_()到底想干嘛?说出来也许大家能解决。

因为C语言中,如果不是特殊情况,最好不要push和pop的操作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

522

帖子

1

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