2013-11-01 3 views
-1

저는 Intel x86 어셈블리가 처음입니다. 실제로이 프로그램을 작성한 첫 번째 프로그램입니다. 루프가 계속해서 다시 시작됩니다.

나는이 비슷한 루프를 사용하는 것을 시도하고있다 :

mov ecx,5 
numLoop: 
[OTHER CODE - DOESN'T OVERWRITE ECX] 
loop numLoop 

이 나에게 잘 보이는, 그러나 그것은 단지 출력에 영원히 루프를하고 그 이유를 알아낼 수 없습니다. 나는 여분의 코드 도중 ECX의 가치를 전혀 바꾸지 않는다.

+1

사이에 코드를 표시하면'ecx '를 변경하는 함수에 대해'call'이 제대로 있습니다. –

+0

@BSH, 나는 모두 printf와 scanf라고 부른다. 이 중 하나가 영향을 줄 수 있습니까? – PotWashMike

+0

그렇습니다. 일부 함수는 먼저 스택에있는 모든 레지스터 값을 저장하지만 안전하기 위해 호출하기 전에 먼저 레지스터 값을 저장하십시오. –

답변

1

약간의 트릭 : 당신이 사용하는 경우 looppushecx이 코드 전에 loop 당신이 그런 스택에서 튀어 나오게해야 호출하기 전에보다 스택하는 것이다.

mov ecx,5 
numLoop: 
push ecx 
[OTHER CODE - DOESN'T OVERWRITE ECX] 
pop ecx 
loop numLoop 
+0

아니, 작동하지 않았다 : ( – PotWashMike