Considérese la siguiente asignación en C;
int a=1;
¿Cual sería el resultado a mostrar con la siguiente instrucción ?
printf("%d"; ++a + ++a);
Sorprendentemente la salida en pantalla variará de compilador a compilador. Esto es una conducta no definida para un lenguaje de programación. Todo depende de la manera en la que el código es generado. Una forma en que puede generarse el código es (entre paréntesis el valor que a
va adquiriendo) y con el que el valor a mostrar es 6, ya que al final se suma el valor 3 asignado al registro BX
más el valor que AX
ha alcanzado (3).
mov ax, 1 ;a=1 inc ax ;++a (2) inc ax ;++a (3) mov bx, ax ;b=a add bx, ax ;b+=a
Pero, variantes pueden darse. Por ejemplo, el que la instrucción mov
se coloque entre las dos inc
, dando como resultado 5. El usar un registro intermedio puede resultar en 4.