免费注册 查看新帖 |

Chinaunix

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

gcc中的汇编 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-06 14:58 |只看该作者 |倒序浏览

C中引用汇编格式如下:
asm( code-string [ : output-list [ : input-list [ : overwrite-list ] ] ] );
#define __get_user_asm(x, addr, err, itype, rtype, ltype, errno)        \
        __asm__ __volatile__(                                   \
                "1:     mov"itype" %2,%"rtype"1\n"              \
                "2:\n"                                          \
                ".section .fixup,\"ax\"\n"                      \
                "3:     mov %3,%0\n"                            \
                "       xor"itype" %"rtype"1,%"rtype"1\n"       \
                "       jmp 2b\n"                               \
                ".previous\n"                                   \
                ".section __ex_table,\"a\"\n"                   \
                "       .align 8\n"                             \
                "       .quad 1b,3b\n"                          \
                ".previous"                                     \
                : "=r"(err), ltype (x)                          \
                : "m"(__m(addr)), "i"(errno), "0"(err))
其中最后两行分别是output-list和input-list,第一行是把addr移到x中去。
"=r"(err)表示输出为整数。
"m"(__m(addr))应该表示引用内存,但是内存地址还是内存中的内容?还需进一步核实。
调用函数中根据size不同指明了ltype的具体类型,
        switch (size) {
        case 1:__get_user_asm(*(u8*)dst,(u8 *)src,ret,"b","b","=q",1);
                return ret;
        case 2:__get_user_asm(*(u16*)dst,(u16*)src,ret,"w","w","=r",2);
                return ret;
        case 4:__get_user_asm(*(u32*)dst,(u32*)src,ret,"l","k","=r",4);
                return ret;
        case 8:__get_user_asm(*(u64*)dst,(u64*)src,ret,"q","","=r",8);
                return ret;


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/38597/showart_1777397.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP