免费注册 查看新帖 |

Chinaunix

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

GCC内联汇编 问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-25 10:06 |只看该作者 |倒序浏览
本帖最后由 tianhailong 于 2010-03-25 10:14 编辑

我正在阅读Linux内核代码,但是汇编不太熟悉,所以请教几个问题
下述代码是什么意思:

static inline struct task_struct * get_current(void)
{
        struct task_struct *current;
        __asm__("andl %%esp,%0; ":"=r" (current) : "0" (~8191UL));
        return current;
}

include\asm_i386\Current.h

大意是获取当前进程的进程控制块

我不明白
           : "0" (~8191UL)
是什么意思,是说输入部=输出部(current) , 赋值为~8191UL?

还有esp指向的是栈顶(是指esp可以指向系统堆栈也可指向用户空间的堆栈?),
进程控制块位于系统堆栈,如果此时esp指向的是系统堆栈,那么做上述andl操作后
esp会减小,就是说系统堆栈是从地址值向高地址增加的,和用户空间堆栈增长方向正好相反?

请教了!

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2010-03-25 10:22 |只看该作者
esp是当前的栈顶指针,他应该是在当前task_struct所指向的内存中。这里操作之后的结果输出到current了。

论坛徽章:
0
3 [报告]
发表于 2010-03-25 22:10 |只看该作者
__asm__("andl %%esp,%0; ":"=r" (current) : "0" (~8191UL));

意思是 输入= 输出("0")。 让编译器随便找个寄存器(“=r”).  输入为~8191UL。输出的结果最后放到current里(开始在某个寄存器r中)。

论坛徽章:
0
4 [报告]
发表于 2010-04-02 11:19 |只看该作者
__asm__("andl %%esp,%0; ":"=r" (current) : "0" (~8191UL));

意思是 输入= 输出("0"。 让编译器随便 ...
accessory 发表于 2010-03-25 22:10



    "0" (~8191UL)); 我在书上查到,意思是说输入和第一个输出使用同一个寄存器,可以理解成输入= 输出("0" ?

论坛徽章:
0
5 [报告]
发表于 2010-04-02 12:32 |只看该作者
LZ可以看看这个
gcc-inline-asm.rar (53.44 KB, 下载次数: 61)

论坛徽章:
0
6 [报告]
发表于 2010-04-03 01:56 |只看该作者
输入和第一个输出使用同一个寄存器,那就是说输入等于输出了。

我们说的是一回事。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP