Ver Mensaje Individual
  #2 (permalink)  
Antiguo 13/11/2015, 09:46
Avatar de xKuZz
xKuZz
 
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 10 meses
Puntos: 27
Respuesta: Prueba con overflow

El bit de overflow del registro de la CPU se activa si la última operación que entrara a la ALU hubiese producido un error, eso no tiene que ver nada con una llamada a una función en C.

Si la última operación que hiciese la ALU dio overflow entonces ese bit estará activo sino no. Si por ejemplo supones una variable x= (1 << 31) si justo antes de meter y sacar de la pila el contenido de las banderas realizas y=x * x; eso te dará overflow (x e y son ints 32 bits).

Esto se debe a que cuando tu pongas ese código si supones x en el registro %ebx y que el registro %eax está sin utilizar podría hacer un código similar a este:

Código C:
Ver original
  1. // cdecl assembly
  2.        movl %ebx, %eax // Copio x en otro registro
  3.        imull %eax, %eax // x*x y lo guardo y lo guaro en %eax
Si tu en este momento compruebas e imull (multiplicación de enteros con signo) provocó overflow el bit de signo estará activado.

Si tu llamas a scanf y haces eso compruebas que lo último que la última instrucción máquina que modificara la ALU no diera lugar a overflow, yo no tengo ni idea de cual será pero seguro que no es una que provoca overflow.