2013-03-29 2 views
-1

while 루프와 x86 어셈블리의 if 문을 구분하는 방법은 무엇입니까? 왜이 잠시 루프가 .L2의 하단에x86 어셈블리의 경우와 비교할 때

jmp .L2    # jump to test at end 
    .L4: 
     movl -4(%ebp), %eax # eax = A 
     cmpl -12(%ebp), %eax # compare A to C 
     jge .L3    # skip next statement if A >= C 
     addl $1, -4(%ebp)  # A++ 
    .L3: 
     subl $1, -8(%ebp)  # B-- 
    .L2: 
     cmpl $0, -8(%ebp)  # compare B to 0 
     jns .L4    # restart code if B >= 0 

    말의 X는 -8 (%의 EBP)에 위치하고 있으며, : 내 프로그램이 86 어셈블리지고 말 ? while(x >= 0){jump to .L4}

         하지 :

         은 왜이다 if(x >= 0){ jump to .L4}을 ??

+0

질문을 이해할 수 없습니다. 왜 .L2가 while 루프로 기능한다고 생각하니? 그것은 하나의 비교를 수행 한 다음 if 문과 같이 점프하거나하지 않습니다. – kronion

답변

1

코드에서 다시 돌아 가기 때문입니다. 다른 말로하면 뛰어 오르는 것입니다 (좋아하는 정신 모형을 고르십시오).

조건이 거짓 일 때까지 조건부 실행이 반복적으로 반복적으로 실행된다는 것을 의미합니다. 이것이 while 루프의 정의입니다. 이제 조립품에는 루프의 기본 개념이 포함되어 있지 않습니다 (접두사는 rep 제외).하지만 거기에 가지 않겠습니다. 그렇습니다, 조건부 점프 - 형식적으로 if 진술 : goto 본문입니다. 그러나 루프의 흐름 제어 패턴을 구현합니다.

Regular if 문은 일반적으로 조건부 점프 전달 (아래쪽)으로 구현됩니다.

+0

놀라운, 정말 고마워. –

+2

x86은 특정 루핑 명령어 ('LOOP','LOOPNE' 및'LOOPE')를 가지고 있으므로 * 루프에 내장 된 개념을 가지고 있다고 말할 수 있습니다. 그러나 요즘은 사용하지 않아야합니다. 원인). – Necrolis

+0

또한 'REP'접두어에주의하십시오. 문자열이나 다른 배열에 대한 루프로 작동 할 수도 있습니다. –

관련 문제