Assembly 在x86程序集中添加0xFFFFFF

Assembly 在x86程序集中添加0xFFFFFF,assembly,x86,Assembly,X86,我目前正在逆向拆卸,无意中发现了一系列我不理解的说明: 在esi中给定一个对象指针 .text:00C20263 cmp dword ptr [esi+80h], 0 .text:00C2026A jnz short loc_C2027D 如您所见,如果成员+0x80不是0(该成员是一个整数),代码将跳转到00C2027D: .text:00C2027D add dword

我目前正在逆向拆卸,无意中发现了一系列我不理解的说明:

esi
中给定一个对象指针

.text:00C20263                 cmp     dword ptr [esi+80h], 0
.text:00C2026A                 jnz     short loc_C2027D
如您所见,如果成员
+0x80
不是0(该成员是一个整数),代码将跳转到
00C2027D

.text:00C2027D                 add     dword ptr [esi+80h], 0FFFFFFFFh
.text:00C20284                 jnz     short loc_C20291
这两个说明我不太明白。首先,将该成员增加0xFFFFFF;但是由于成员不是0,这不会超过32位整数的最大值吗?而
jnz
指令何时跳转


可以指出这两条指令的用途吗?

对于有符号变量,0ffffffh与-1相同,因此这是从值中减去一,并检查是否使其为零。编译器通常会发出“加法负值”而不是子指令,可能是因为它允许在加法和减法中重用编译器逻辑。

非常感谢。在这一点上,这是完全有道理的。@MihaiLabo对此非常抱歉,当我读到这封信时,我没能按它,然后就忘了它;)