Pergunta

Já me pediram para criar um loop simples em linguagem assembly, mas estou tendo problemas como o ciclo não termina quando deveria, ele continua em um loop infinito.

Eu preciso dar a ECX uma variável que é tomado pela entrada, mas no meu código abaixo, mesmo quando eu especificar o contador diretamente é ainda cai em um loop infinito.

Meu código é aqui (ATUALIZADO):

Pastebin Código

O código pode conter diferentes do ciclo real erros.

// editado para explicação do exigências programas ...

O programa precisa ter uma entrada "n", que será usado como o contador do loop. Eu, então, tomar a entrada "n" mais números, quando um número é necessidade I positivo para adicionar que a variável postot, quando a necessidade negativa I acrescentar que à variável negatot. Depois de "n" números foram inseridos eu imprimir os resultados para cada variável e sai do programa.

Edit 2:

Corrigido o problema de loop limpando a pilha corretamente para que eu adicionei:

        add esp,8

e

next:   push ecx
        ...
pop ecx
loop next

O que corrigiu o problema loop.

Foi útil?

Solução

Ok, eu entendi. . . Você leu int o número do usuário. Em seguida, na linha 41 você quer saltar para a linha 47 ou cair para a linha 43.

Se você vai para linha 43, você, em seguida, chegar a linha 45 que salta para a linha 49 (final). Se em vez disso, você foi para a linha 47, você vai cair para a linha 49 (final).

Em ambos os casos, você, em seguida, loop de volta para a linha 29 (ao lado).

Você espera que seu ECX registrar-se para diminuir a cada ciclo de tempo for atingido, e para que permaneçam inalterados durante o processamento do loop.

Você já tentou empurrar ecx em torno da linha 29, e estourá-lo direito antes de loop?

Outras dicas

Eu vejo dois erros:

  • Há uma JG positive lá depois que você incrementar um ponteiro de pilha. Tem a certeza que pretende verificar o resultado de mexer com o seu quadro de pilha, em vez do valor do número digitado?

  • jmp end não: Logo após end vem um loop next. Não vejo qualquer condição para que encerra o loop.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top