JE / JNE와 JZ / JNZ의 차이점


89

86 어셈블리 코드에서 있습니다 JEJNE정확히 같은 JZJNZ?


59
긴 대답 : 예.
Hans Passant 2013 년

9
짧은 대답 : 아니요. (그러나 그들은에 해당 정확히 그들이 할 수 있도록, 동일한 기계 코드 정확히 같은 일을 그들은 단지 같은 비교를 위해 다른 니모닉 있습니다..)

4
JE는 같으면 점프를 의미하고, 이전 비교에 z 플래그가 설정되어 있으면 같고, JZ는 z 플래그가 설정되면 점프를 의미합니다. 그들은 정확히 동일하며, 어떤 사람들은 내 비교가 같거나 같지 않다는 관점에서 생각 / 쓰기를 원합니다. 어떤 사람들은 z 플래그 세트 또는 z 플래그 클리어라고 생각하고 작성합니다.
old_timer

답변:


125

JE그리고 JZ때 조건부 점프 : 정확히 같은 것은 단지 다른 이름은 ZF(이하 "영"플래그)가 1과 같다.

(유사 JNE하며 JNZ때 조건부 점프 단지 다른 이름은 ZF0과 동일하다)

당신은 수있는 상호 교환을 사용하지만, 당신은 해야 당신이 무엇을하고 있는지에 따라 사용할 :

  • JZ/ JNZ는 0과 같은 것을 명시 적으로 테스트 할 때 더 적합합니다.

    dec  ecx
    jz   counter_is_now_zero
    
  • JE그리고 지시 JNE후에 더 적절 CMP합니다 :

    cmp  edx, 42
    je   the_answer_is_42
    

    ( CMP명령은 빼기를 수행하고 플래그를 유지하면서 결과 값을 버립니다. 이것이 ZF=1피연산자가 같고 같지 않을 때 얻는 이유 ZF=0입니다.)


2
TL : DR : 동일한 기계 작동, 다른 의미 론적 의미. 그냥 같은 jb/ jc/ jnae모든 테스트 CF = 1. 참조 felixcloutier.com/x86/jcc (또는 cmovcc 또는 setcc)
피터 코르

36

로부터 명령 세트 참조 - 인텔의 매뉴얼JEJZ(동일한 연산 코드가 74rel8에 대한 / 0F 84도 확인해 16/32를 들어) JNEJNZ( 75rel8에 대한 / 0F 85확인해위한 16/32) 공유 옵 코드.

JE그리고 JZ그들 모두에 대한 검사 ZF(또는 제로 플래그), 수동 약간 처음의 설명에서 다르지만 JErel8 및 JZrel8 ZF사용하지만, 기본적으로 그들은 동일합니다.

다음은 매뉴얼의 464, 465 및 467 페이지에서 발췌 한 것입니다.

 Op Code    | mnemonic  | Description
 -----------|-----------|-----------------------------------------------  
 74 cb      | JE rel8   | Jump short if equal (ZF=1).
 74 cb      | JZ rel8   | Jump short if zero (ZF ← 1).

 0F 84 cw   | JE rel16  | Jump near if equal (ZF=1). Not supported in 64-bit mode.
 0F 84 cw   | JZ rel16  | Jump near if 0 (ZF=1). Not supported in 64-bit mode.

 0F 84 cd   | JE rel32  | Jump near if equal (ZF=1).
 0F 84 cd   | JZ rel32  | Jump near if 0 (ZF=1).

 75 cb      | JNE rel8  | Jump short if not equal (ZF=0).
 75 cb      | JNZ rel8  | Jump short if not zero (ZF=0).

 0F 85 cd   | JNE rel32 | Jump near if not equal (ZF=0).
 0F 85 cd   | JNZ rel32 | Jump near if not zero (ZF=0).

-5
  je : Jump if equal:

  399  3fb:   64 48 33 0c 25 28 00    xor    %fs:0x28,%rcx
  400  402:   00 00
  401  404:   74 05                   je     40b <sims_get_counter+0x51>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.