免费注册 查看新帖 |

Chinaunix

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

[虚拟化] VMLAUNCH指令内联汇编,请高手们帮忙解释下 [复制链接]

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
1 [报告]
发表于 2014-08-26 21:38 |显示全部楼层
回复 1# humjb_1983

humjb_1983,我也给你搜索了一下,最吻合的就你自己的解释了。我觉得最好的办法就是你把这个.c  gcc -S一下,直接看一下最终生成的汇编,那就一切都开朗了。{:3_189:}


   

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
2 [报告]
发表于 2014-08-27 11:24 |显示全部楼层
回复 4# humjb_1983

尝试在stackoverflow上发个帖吧。那边大牛多,我上次想注册注册不上。
关于你说和网上文章对不上的问题,应该是体系结构的差异,你看的应该是MSP单片机的GCC编译器。

类似的,下面这个贴提到P选项:
http://stackoverflow.com/questio ... ver-m-in-linux-kern

http://www.cs.virginia.edu/~clc5q/gcc-inline-asm.pdf
的4.11 Output substitutions提到了更多这类用法。

GCC手册提到相关于东西,但和你的不完全一样。
https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html
请看里头的6.42.2.3 Output Operands节,对应用X86的阔展,如下:
https://gcc.gnu.org/onlinedocs/g ... 386Operandmodifiers


   

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
3 [报告]
发表于 2014-08-27 11:43 |显示全部楼层
回复 5# Tinnal

https://gcc.gnu.org/onlinedocs/g ... 386Operandmodifiers
这个说是应该是对的。
以下面的代码片段为列:
     int main()
     {
        int iInt = 1;
     
     top:
     
        asm volatile goto ("some assembler instructions here"
        : /* No outputs. */
        : "q" (iInt), "X" (sizeof(unsigned char) + 1)
        : /* No clobbers. */
        : top);
     }

没有带i386 Operand modifiers,则:
Operand        masm=att            masm=intel
%1                     $2                 2

如果带上i386 Operand modifiers,则
Operand        masm=att            masm=intel
%c1                     2                          2


c的功能为:Require a constant operand and print the constant expression with no punctuation. 说白了,就是永远不要在常量前面加$符。


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP