V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zauruso
V2EX  ›  C

如何在 gcc 环境中将这个 cpp 代码段转换成 C 语言中的宏函数?

  •  
  •   zauruso · 2019-04-06 10:16:03 +08:00 · 3131 次点击
    这是一个创建于 2060 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Gcc 使用 AT&T 语法,而这段代码是 Intel 语法,怎么在我的 C 语言程序中作为一个宏函数使用它呢

    inline unsigned int Div_TEN9_2(unsigned long x,unsigned int *pRemainder )
    {
             _asm
             {
                      mov eax,unsigned int ptr [x] 
                      mov edx,unsigned int ptr [x+4]              
                      mov ebx,TEN9
                      div ebx
                      mov ebx,pRemainder
                      mov [ebx],edx                                                                    
             }
    }
    
    7 条回复    2019-04-06 19:39:05 +08:00
    yanaraika
        1
    yanaraika  
       2019-04-06 10:50:56 +08:00 via Android
    手动翻译下就好,右转 stackoverflow
    secondwtq
        2
    secondwtq  
       2019-04-06 11:25:47 +08:00
    1. GCC 不是什么 AT&T 语法,只是默认 AT&T 语法,可以换成 intel 语法,是 GCC 和 MSVC 的 InlineAsm 扩展的区别,并且也不只是语法层面的
    2. 这好像没啥可 port 的,就一个 divrem,其实编译器优化应该直接就能搞定
    icyalala
        3
    icyalala  
       2019-04-06 11:32:07 +08:00
    用 C 来写的话,开了优化后编译器会把 div 优化成 mul 和 shr,你自己手写汇编用 div 反而可能会更慢
    hx1997
        4
    hx1997  
       2019-04-06 13:20:58 +08:00 via Android
    gcc -masm=intel 了解一下
    ipwx
        5
    ipwx  
       2019-04-06 13:22:15 +08:00
    这种函数 -O3 不就行了,还手动汇编。。。
    ccpp132
        6
    ccpp132  
       2019-04-06 14:29:17 +08:00 via Android
    这汇编写的估计还不如编译优化的速度
    glishijie
        7
    glishijie  
       2019-04-06 19:39:05 +08:00 via Android
    想要性能 inline 就好了,不需要一定宏函数,加 always inline ;另外汇编最好加上 volatile
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5993 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 03:16 · PVG 11:16 · LAX 19:16 · JFK 22:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.