Dalam kode assembly x86, apakah JE
dan JNE
persis sama dengan JZ
dan JNZ
?
Dalam kode assembly x86, apakah JE
dan JNE
persis sama dengan JZ
dan JNZ
?
Jawaban:
JE
dan JZ
hanya nama yang berbeda untuk hal yang persis sama: lompatan bersyarat ketika ZF
(tanda "nol") sama dengan 1.
(Demikian pula, JNE
dan JNZ
hanya nama yang berbeda untuk lompatan bersyarat jika ZF
sama dengan 0.)
Anda dapat menggunakannya secara bergantian, tetapi Anda harus menggunakannya tergantung pada apa yang Anda lakukan:
JZ
/ JNZ
lebih sesuai saat Anda secara eksplisit menguji sesuatu yang sama dengan nol:
dec ecx
jz counter_is_now_zero
JE
dan JNE
lebih sesuai setelah CMP
instruksi:
cmp edx, 42
je the_answer_is_42
(Sebuah CMP
instruksi melakukan pengurangan, dan membuang nilai hasilnya, sambil mempertahankan bendera; itulah mengapa Anda mendapatkan ZF=1
ketika operannya sama dan ZF=0
kapan tidak.)
jb
/ jc
/ jnae
semua pengujian CF = 1. Lihat felixcloutier.com/x86/jcc (atau cmovcc atau setcc)
Dari manual Intel - Referensi Set Instruksi , JE
dan JZ
memiliki opcode yang sama ( 74
untuk rel8 / 0F 84
untuk rel 16/32) juga JNE
dan JNZ
( 75
untuk rel8 / 0F 85
untuk rel 16/32) berbagi opcode.
JE
dan JZ
mereka berdua cek untuk ZF
(atau nol bendera), meskipun berbeda panduan sedikit dalam deskripsi pertama JE
rel8 dan JZ
rel8 ZF
penggunaan, tetapi pada dasarnya mereka adalah sama.
Ini adalah kutipan dari halaman manual 464, 465 dan 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).