CMP ESI,-20。这部分代码对我来说毫无意义。这个魔法是如何运作的? [重复]

问题描述 投票:0回答:1
76EB750D   83FE E0          CMP ESI,-20
76EB7510   0F87 AD000000    JA msvcrt.76EB75C3

我完全看不懂这部分代码。

  1. 为什么双字 ESI 与字节相比?!
  2. 如果 ESI 等于 FFFFFFF0 则执行跳转。如果 ESI 等于 FFFFF0F0,则不执行跳转。如果ESI等于000000F0则不执行跳转。这台神奇的机器是如何工作的?!

附注不,它不是重复的。遇到这种问题的人不会开始搜索“如何将 8 字节添加到 32 字节”,这是可笑的。你们,伙计们,有太多的空闲时间,并且太渴望将自己的权力强加给提出问题的人。

assembly x86 cpu-registers disassembly machine-code
1个回答
0
投票

Peter Cordes 在评论中回答:

“与大多数带有立即数的指令一样,cmp 支持全角和符号扩展-imm8 编码。 felixcloutier.com/x86/cmp 。如果 ESI 无符号高于 0xFFFFFFE0 = 32 位 -20,则 cmp/ja 会跳转”.

© www.soinside.com 2019 - 2024. All rights reserved.