在线组装

aCu*_*ria 2 c++ assembly

对于下面的代码,如果我想将for循环转换为内联汇编,它将如何完成?(原谅奇怪的代码,我刚刚编写了.)

1)这是针对x86,使用visual studio

2)这是一个"如何使用在线组装"的问题,而不是"如何优化此代码"的问题

3)任何其他例子都没问题.我将在abit中考虑一些更好的示例代码.

好的,我希望这是一个更好的例子:

int doSomething(double a, double b, double c)
{
    double d;
    for(int i=100;i<200;i++)
    {
        d = a*a + b*b + c*c;
        if(d>i)
            return (i-99);
    }
    return -1;
}
Run Code Online (Sandbox Code Playgroud)

小智 5

它可能会开始像这个不完整和有些低效的例子.但是应该演示语法.

double doSomething(void) {
    double a=1,b=2,c=3;
    __asm {
        mov ecx,10
loop:
        fld a // a
        fmul st(0),st(0) // aa
        fld b // b aa
        fmul st(0),st(0) // bb aa
        fsubp // aa-bb
        fstp c // c = a*a-b*b

        // and so on

        dec ecx
        jnz loop
    }
    return a+b+c;
}
Run Code Online (Sandbox Code Playgroud)

使用SSE指令将是另一种选择.

VC++内联汇编程序在此处记录:http://msdn.microsoft.com/en-us/library/4ks26t93.aspx

英特尔处理器参考手册如下:http://www.intel.com/products/processor/manuals/