2012-12-31 2 views
0

어셈블리의 .IF 및 IF 지시문의 차이점은 무엇입니까? .IF에 대한 문서의 :어셈블리의 .IF와 IF 간의 차이점

.IF condition1 
     statements 
    [[.ELSEIF condition2 
      statements]] 
    [[.ELSE 
      statements]] 
     .ENDIF 

및 IF에 대한 :

IF expression1 
     ifstatements 
    [[ELSEIF expression2 
      elseifstatements]] 
    [[ELSE 
      elsestatements]] 
    ENDIF 

답변

4

IF-ELSEIF-ELSE-ENDIF (점없이) 컴파일 시간 지시어이다. 어셈블러는 조건을 테스트하고 결과에 따라 결과 프로그램에 일련의 명령문 중 하나만 포함시킵니다. C 전 처리기 지시문 #if, #elif, #else#endif과 동일한 용도로 사용됩니다.

.IF - .ELSEIF - .ELSE - .ENDIF (점으로 표시)는 실행 시간 지정 문입니다. 어셈블러는 비교 및 ​​점프 명령을 생성합니다. 이들은 if (...) { ... } else if (...) { ... } else { ... } 양식으로 C 명령문과 동일한 목적을 수행합니다.


참고 : 나는 MASM 유창하지, 그래서이 예제의 표기에 오류가있을 수 있습니다. 컴파일의 전처리 단계에서

something EQU 1 

somewhere: 
    mov ax, 42 
    IF something == 1 
    xor bx, 10 
    ELSE 
    mov bx, 20 
    ENDIF 
    add ax, bx 

, (점 제외) IFELSEIF 문에서 조건을 테스트하고, 프로그램 종료됩니다 코드의 블록 중 하나를 선택합니다 컴파일러. 상기 코드는 다음에 온 :

somewhere: 
    mov ax, 42 
    xor bx, 10 
    add ax, bx 

다른 예 :

something EQU 1 

somewhere: 
    mov ax, 42 
    mov dx, something 
    .IF dx == 1 
    xor bx, 10 
    .ELSE 
    mov bx, 20 
    .ENDIF 
    add ax, bx 

를 컴파일 상기 전처리 단계에서, 컴파일러는 조립 안내로 (도트)와 .IF -statements 바뀔 것이다. 위의 코드는 아마도 다음과 같이 바뀌었을 것입니다 :

something EQU 1 

somewhere: 
    mov ax, 42 
    mov dx, 1 
    cmp dx, 1 
    jnz else_clause 
    xor bx, 10 
    jmp past_endif 
else_clause: 
    mov bx, 20 
past_endif: 
    add ax, bx 

조건은 실제로 실행시 검사됩니다.

+0

당신이 diffrent을 보여줄 수있는 예를 들어이 있습니까? –

+1

요청에 따라 예제를 추가했습니다. –

+0

감사합니다. 예 : –

-2

잘못된 "ELSEIF는-ELSE-ENDIF IF-(점없이)는 컴파일 시간 지시어이다. 어셈블러는 조건을 테스트하고 결과에 따라, 단지 문장의 서열 중 하나를 포함 할 것이다 C preprocessor 지시문 #if, #elif, #else 및 #endif와 동일한 목적을 수행합니다.

.IF -.ELSEIF -.ELSE -.ENDIF (점과 함께) 어셈블러는 비교 및 ​​점프 명령을 생성합니다. 이들은 (...) {...} else if (...) {...} else {.. .}. "

트루 .if은 (절대 표현해야 함) 인수가 제로가 아닌 경우에 조립되는 소스 프로그램의 일부로 간주되는 코드 섹션의 시작을 표시한다.

참조 : http://web.mit.edu/gnu/doc/html/as_toc.html#SEC65

+1

이것은 MASM 질문입니다.그것은 GNU'as '(일명 가스)보다 다른 지시어를 사용합니다. 당신의 대답 ** 부분은 가스 구문에만 적용됩니다. 다른 어셈블러에 대한 문서 링크는 http://stackoverflow.com/tags/x86/info를 참조하십시오. –

+0

고마워. 그거 모르겠다. – Rasool