Assembly JE在零标志设置为1时跳转?

Assembly JE在零标志设置为1时跳转?,assembly,x86,Assembly,X86,执行的指令是 0044B8B8 |> F745 14 000800>TEST DWORD PTR SS:[EBP+14],800 0044B8BF |.^0F84 7BFFFFFF JE App.0044B840 EBP指向0022F38Cso+14是0022F3A0哪个值是00001002,当我们测试800(对吗?)和JE与JZ(对吗?)时,寄存器似乎在两条指令之间没有改变(EIP除外) 然而,这一跳跃仍在进行。有人能解释一下原因吗?我不太确定你在期待什么,但是 由于结果为

执行的指令是

0044B8B8  |> F745 14 000800>TEST DWORD PTR SS:[EBP+14],800
0044B8BF  |.^0F84 7BFFFFFF  JE App.0044B840
EBP指向
0022F38C
so+14是
0022F3A0
哪个值是
00001002
,当我们测试800(对吗?)和
JE
JZ
(对吗?)时,寄存器似乎在两条指令之间没有改变(EIP除外)


然而,这一跳跃仍在进行。有人能解释一下原因吗?

我不太确定你在期待什么,但是


由于结果为零,因此进行跳跃。

JZ与JE相同。由于CMP指令是减法指令而不存储结果,因此如果CMP的两个操作数相等,则它们的差值为零,并设置Z标志


而且,正如约阿希姆所说,测试是简单的,没有存储结果。

我想在组件上涂一层底漆是不够的。。谢谢,在继续之前我会多读一些。这似乎有点违反直觉
cmp
后跟
je
非常有意义。@natli我通常去那里快速查找各种说明,如果是给你的,你可能想看一下。
EAX 00000039
ECX 00000000
EDX 00000000
EBX 0022F3C9
ESP 0022F37C ASCII "XY"
EBP 0022F38C
ESI CCCCCCCD
EDI 004597E6 ASCII "XYZ"
EIP 0044B8BF App.0044B8BF
C 0  ES 0023 32bit 0(FFFFFFFF)
P 1  CS 001B 32bit 0(FFFFFFFF)
A 0  SS 0023 32bit 0(FFFFFFFF)
Z 1  DS 0023 32bit 0(FFFFFFFF)
S 0  FS 003B 32bit 7FFDD000(FFF)
T 0  GS 0000 NULL
D 0
O 0  LastErr ERROR_SUCCESS (00000000)
EFL 00000246 (NO,NB,E,BE,NS,PE,GE,LE)
ST0 empty -??? FFFF 00700070 00700070
ST1 empty -??? FFFF 00F000F0 00F000F0
ST2 empty -??? FFFF 005A0040 004E006A
ST3 empty -??? FFFF 000E0005 006000EB
ST4 empty -??? FFFF 1D0A67F9 E9A7BEF0
ST5 empty 0.0000000000000006002
ST6 empty 0.0000000000000006002
ST7 empty 0.0000000000000006002
               3 2 1 0      E S P U O Z D I
FST 4000  Cond 1 0 0 0  Err 0 0 0 0 0 0 0 0  (EQ)
FCW 037F  Prec NEAR,64  Mask    1 1 1 1 1 1
0x0800 BITWISE AND 0x1002 = 0