Pregunta

Me han pedido para crear un bucle simple en lenguaje ensamblador, pero tengo problemas para que el bucle no termina cuando debe, que continúa en un bucle infinito.

necesito dar el ECX una variable que se toma por la entrada, pero en mi código de abajo, incluso cuando especifico el contador está directamente aún está en un bucle infinito.

Mi código está aquí (ACTUALIZADO):

Código PasteBin

El código puede contener errores que no sean el bucle real.

// Editado para la explicación de los requisitos de los programas ...

El programa necesita tomar una entrada "n", que se utiliza como el contador para el bucle. entonces tomo entrada "n" más números, cuando un número es positivo que tengo que añadir que a la variable de postot, cuando es negativo tengo que añadir que a la negatot variable. Después de haber introducido el número "n" puedo imprimir los resultados para cada variable y se sale del programa.

Editar 2:

solucionado el problema de bucle en la limpieza de la Pila correctamente lo que añade:

        add esp,8

y

next:   push ecx
        ...
pop ecx
loop next

¿Qué solucionó el problema de bucle.

¿Fue útil?

Solución

Ok, lo tengo. . . Uno lee int el número del usuario. A continuación, en la línea 41 que o bien saltar a la línea 47 o se cae a través de la línea 43.

Si usted va a la línea 43, a continuación, llegar a la línea 45, que salta a la línea 49 (final). Si por el contrario, se fue a la línea 47, le caen a través de la línea 49 (final).

En ambos casos, después coloca de nuevo a la línea 29 (al lado).

Se espera que su registro ECX para decremento cada vez que se alcanza lazo, y para que no se modifican durante el procesamiento del bucle.

¿Ha intentado apretar ECX en torno a la línea 29, y hacer estallar justo antes del bucle?

Otros consejos

Veo dos errores:

  • Hay una JG positive de allí después de que incrementar un puntero de pila. ¿Seguro que desea comprobar el resultado de tocar el violín con su marco de pila, en lugar del valor del número que ha introducido?

  • jmp end no: Inmediatamente después viene una end loop next. No veo ninguna condición para dar por terminado el bucle.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top