对于下面的代码,如果我想将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/