Compartir a través de


Advertencia del compilador (nivel 1) C4731

"pointer": registro de puntero de marco "register" modificado por código de ensamblado insertado

Se modificó un registro de puntero de marco. Debe guardar y restaurar el registro en el bloque de ensamblado insertado o la variable de marco (local o parámetro, según el registro modificado) o es posible que el código no funcione correctamente.

El ejemplo siguiente genera la advertencia C4731:

// C4731.cpp
// compile with: /W1 /LD
// processor: x86
// C4731 expected
void bad(int p) {
   __asm
   {
      mov ebp, 1
   }

   if (p == 1)
   {
      // ...
   }
}

EBP es el puntero de marco (no está permitido FPO) y se está modificando. Cuando se hace referencia a p más adelante, se hace referencia a él con respecto a EBP. Pero el código sobrescribió EBP, por lo que el programa no funcionará correctamente e, incluso, puede generar un error.