2013-12-20 6 views
0

방금 ​​MASM을 배우기 시작했고 간단한 루프를 실행해야하는 샘플 코드를 작성했습니다.MASM 무한 루프

mov eax, 1 
x: add eax,1 
    print str$(eax),13,10 
    cmp eax, 4 
    jne x 
    inkey 
    exit 

그래서 저는이 작은 프로그램이 2,3,4를 인쇄 할 것으로 예상했습니다. 그러나 내가 얻는 것은 어떻게 든 무한 루프입니다. 그리고 인쇄를 계속합니다. 3. 내가 생각한대로 작동하지 않는 단서가 있습니까?

답변

1

eax은 휘발성 레지스터이므로 해당 값을 함수/매크로 호출에서 저장하지 않아도됩니다.

mov  eax, 0 
x: 
    add  eax,1 
    push eax 
    print str$(eax),13,10 
    pop  eax 
    cmp  eax, 4 
    jne  x 

    inkey 
    exit 

을하거나 값이 호출자 (ESI, EDI, EBX)

mov  ebx, 1 
x: 
    add  ebx,1 
    print str$(ebx),13,10 
    cmp  ebx, 4 
    jne  x 

    inkey 
    exit 
으로 저장하는 데 필요한 비 휘발성 레지스터를 사용 : 당신은 print 매크로 전에 eax을 저장하고 나중에 복원 할 필요가
+0

삭제 해 주셔서 감사합니다. 이 두 가지 해결책에 대해 한 가지 더 질문합니다. 'push eax'가있는 첫 번째 것이 stack을 사용하지 않는 두 번째 것보다 (상당히) 더 느릴 것인가? – mewa