ProgramingTip

JE / JNE와 JZ / JNZ의 차이점

bestdevel 2020. 10. 21. 21:16
반응형

JE / JNE와 JZ / JNZ의 차이점


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


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

(유사 JNEJNZ조건부 점프 단지 다른 이름은 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입니다.)


로부터 명령 세트 참조 -의 매뉴얼 인텔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).

  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>

참고 URL : https://stackoverflow.com/questions/14267081/difference-between-je-jne-and-jz-jnz

반응형