문제

어셈블리 언어로 간단한 루프를 만들어 달라는 요청을 받았지만 루프가 끝나지 않기 때문에 문제가 있습니다. 무한 루프에서 계속됩니다.

ECX에 입력에 의해 취해진 변수를 제공해야하지만, 카운터를 직접 지정하는 경우에도 아래 코드에서 여전히 무한 루프로 떨어집니다.

내 코드는 여기에 있습니다 (업데이트) :

페이스트 빈 코드

코드에는 실제 루프 이외의 오류가 포함될 수 있습니다.

// 프로그램 요구 사항에 대한 설명을 위해 편집되었습니다 ...

이 프로그램은 루프의 카운터로 사용되는 입력 "n"을 가져와야합니다. 그런 다음 입력 "n"더 많은 숫자를 취합니다. 숫자가 양수 일 때 변수 포스트 오토에 추가해야합니다. "n"숫자가 입력 된 후 각 변수에 대한 결과를 인쇄하고 프로그램이 종료됩니다.

편집 2 :

스택을 올바르게 지우면서 루프 문제를 수정하여 다음을 추가했습니다.

        add esp,8

그리고:

next:   push ecx
        ...
pop ecx
loop next

루프 문제를 해결했습니다.

도움이 되었습니까?

해결책

알았어, 나는 그것을 얻었다. . . 사용자의 번호를 int로 읽습니다. 그런 다음 41 행에서 47 번 줄로 점프하거나 43 행으로 넘어갑니다.

43 번 줄로 가면 49 번 (끝)로 점프하는 45 행에 도달합니다. 대신 47 번 줄에 갔다면 49 행 (끝)으로 넘어집니다.

두 경우 모두 29 행 (다음)으로 돌아갑니다.

루프에 도달 할 때마다 ECX 레지스터가 감소 할 것으로 예상하고 루프 처리 중에 변경되지 않은 상태로 유지됩니다.

29 행 주위에 ECX를 밀고 루프 직전에 팝업을 시도 했습니까?

다른 팁

두 가지 오류가 나타납니다.

  • 거기에 JG positive 스택 포인터를 증가시킨 후에. 입력 한 숫자의 값보다는 스택 프레임으로 피워링 한 결과를 확인하고 싶습니까?

  • jmp end 그렇지 않습니다 : 바로 end 온다 loop next. 루프를 종료하기위한 조건이 보이지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top