免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1997 | 回复: 3
打印 上一主题 下一主题

__put_user_1()函数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-04 21:11 |只看该作者 |倒序浏览
5可用积分
#define __put_user_1(x, ptr) __asm__ __volatile__("call __put_user_1":"=a" (__ret_pu):"0" ((typeof(*(ptr)))(x)), "c" (ptr))

能不能对这段代码详细解释下。谢谢

论坛徽章:
0
2 [报告]
发表于 2009-05-04 23:49 |只看该作者
如果是对GCC里面的汇编不了解,可以看这个帖子:
http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html

如果已经看过上面的帖子,或者了解GCC里的汇编,但是还是不懂,可以说下哪里不明白。

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:09
3 [报告]
发表于 2009-05-05 09:10 |只看该作者
#define __put_user_1(x, ptr) __asm__ __volatile__("call __put_user_1":"=a" (__ret_pu):"0" ((typeof(*(ptr)))(x)), "c" (ptr))

"call __put_user_1 " 是要执行的汇编指令,这里就是调用一个函数了。
"=a" (__ret_pu)    上边汇编指令的输出部分,这里就是返回值了,a表示把返回值放入eax,然后再__ret_pu=eax
"0" ((typeof(*(ptr)))(x)), "c" (ptr) 是上边汇编指令的输入部分,这里就是输入参数了,0表示用它限制的操作数与某个指定的操作数匹配,也即该操作数就是指定的那个操作数。((typeof(*(ptr))) 表示取*(ptr)的类型,返回值是个字符串比如int之类的。 c表示将输入变量放入ecx,即让ecx=ptr.


不明白的话,再联系啊!呵呵!

评分

参与人数 1可用积分 +9 收起 理由
dreamice + 9 解释得很好

查看全部评分

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
4 [报告]
发表于 2009-05-05 10:48 |只看该作者
解释得很好,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP