sie machen etwas falsch. eax enthält bei funktionsaufrufen den rückgabewert für 32-bit werte (bei __stdcall und __cdecl afaik). das heißt, sie können sich das letzte return sparen... und natürlich müssen sie vorher den wert sichern, z.b. mit

...
mov r1, eax
}

this->value = r1;

dann wäre aber wieder das problem, dass nicht mehr gesichert ist, dass eax noch r1 enthält.