86 어셈블리 코드에서 있습니다 JE
와 JNE
정확히 같은 JZ
과 JNZ
?
답변
JE
그리고 JZ
때 조건부 점프 : 정확히 같은 것은 단지 다른 이름은 ZF
(이하 “영”플래그)가 1과 같다.
(유사 JNE
하며 JNZ
때 조건부 점프 단지 다른 이름은 ZF
0과 동일하다)
당신은 수있는 상호 교환을 사용하지만, 당신은 해야 당신이 무엇을하고 있는지에 따라 사용할 :
-
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
입니다.)
답변
로부터 명령 세트 참조 – 인텔의 매뉴얼 의 JE
과 JZ
(동일한 연산 코드가 74
rel8에 대한 / 0F 84
도 확인해 16/32를 들어) JNE
및 JNZ
( 75
rel8에 대한 / 0F 85
확인해위한 16/32) 공유 옵 코드.
JE
그리고 JZ
그들 모두에 대한 검사 ZF
(또는 제로 플래그), 수동 약간 처음의 설명에서 다르지만 JE
rel8 및 JZ
rel8 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>