MASM32 (Lib: Irvine32) Comportamiento extraño de variables
El problema es que la declaración if es verdadera varias veces, por lo que la variable “iDATA” vuelve a ser 100, pero al mismo tiempo, cuando imprimo la variable después de la declaración if, no dice que sea 100 y solo aumenta de 0 a x, como se esperaría.
.data
iDATA DWORD 0
.code
main PROC
loop0:
mov eax, iDATA
.if eax == 100
call WriteInt
.endif
add iDATA, 1
jmp loop0
main ENDP
INVOKE ExitProcess, 0
END main
output: +100+100+100+100+100+100+100+100…
Por favor explícame cuál es mi error.
davy.ai
El problema con el código es que la función
WriteInt
se llama cada vez que la declaración if es verdadera, es decir, cuandoiDATA
es igual a 100. Una vez queiDATA
es igual a 100, continúa incrementándose y la declaración if sigue siendo verdadera, lo que hace queWriteInt
sea llamada múltiples veces con el mismo valor (100) cada vez.Sin embargo, la razón por la cual la variable
iDATA
no parece cambiar después de que llega a 100, es porque la funciónWriteInt
no cambia el valor deiDATA
. El valor deiDATA
sigue incrementándose a pesar de llamar repetidamente aWriteInt
.Para solucionar este problema, puedes establecer una variable de indicador para indicar que
WriteInt
ya ha sido llamada para un valor dado deiDATA
, y solo llamar aWriteInt
si el indicador no ha sido establecido.Aquí tienes un ejemplo de cómo podrías modificar el código para lograr esto:
Esto asegurará que
WriteInt
solo se llame una vez para cada valor deiDATA
.