Я хочу преобразовать цикл for в следующем коде в сборку, но я не уверен, как начать. Мы будем благодарны за объяснение того, как это сделать и почему это работает.
Я использую VS2010, C ++, пишу для x86. Код выглядит следующим образом:
for (n = 0; norm2 < 4.0 && n < N; ++n)
{
__asm{
///a*a - b*b + x
fld a // a
fmul st(0), st(0) // aa
fld b // b aa
fmul st(0), st(0) // bb aa
fsub // (aa-bb) // st(0) - st(1)
fld x // x (aa-bb)
fadd // (aa-bb+x)
/// 2.0*a*b + y;
fld d // d (aa-bb+x)
fld a // d a (aa-bb+x)
fmul // ad (aa-bb+x)
fld b // b ad (aa-bb+x)
fmul // abd (aa-bb+x)
fld y // y adb (aa-bb+x)
fadd // b:(adb+y) a:(aa-bb+x)
fld st(0) //b b:(adb+y) a:(aa-bb+x)
fmul st(0), st(0) // bb b:(adb+y) a:(aa-bb+x)
fld st(2) // a bb b:(adb+y) a:(aa-bb+x)
fmul st(0), st(0) // aa bb b:(adb+y) a:(aa-bb+x)
fadd // aa+bb b:(adb+y) a:(aa-bb+x)
fstp norm2 // store aa+bb to norm2, st(0) is popped.
fstp b
fstp a
}
}