【问题标题】:Jump Command and compare debug跳转命令和比较调试
【发布时间】:2013-08-27 16:25:43
【问题描述】:

我正在尝试理解一些跳转命令

edx 为 -126,eax 为 +127

cmp edx, eax
ja short <offset>

它说明了跳转,现在我明白它基于设置的标志,我不明白数学是如何有意义的,例如,如果我们有一个 JZ 命令并且结果是相等的,那么显然跳转会是采取。据我了解, cmp 命令从源中减去目标,在这种情况下,它将是 -126 加上 127,结果为 1,我只是没有得到什么 MATH 结果触发标志?这就是我想知道的全部内容

【问题讨论】:

  • 127 - (-126) == 253,不是1... 另外,如果我没记错的话,ja 会查看 (Z)ero 标志和 (S)ign 标志,如果两者都没有设置。换句话说,如果减法的结果为正且非零。
  • 代码看起来像是 Intel 语法,所以应该是 -126 - 127(写成 0xFFFFFF82 - 0x7F 时更有意义)

标签: assembly


【解决方案1】:

ja 表示如果 unsigned 高于(CF=0ZF=0)则跳转。有符号值对应的指令是jg

-126 的 32 位值是 0xFFFFFF82,从无符号值来看明显大于 127 (0x7F)。

【讨论】:

  • o 我看到 FFFFFFF 是我所缺少的,明白了,我认为这是一个消极与积极的事情,但是等一下 cmp 操作,它不是从源中减去目标吗?或没有?只是比较数字,在做的时候,我见过一个操作,它测试 EDI、EDI,然后有一个 JL,它需要一个跳跃?
  • @davidwabb test edi, edi \ jl somewhere 测试edi 的符号。 jl 如果SF xor OF 则跳转。 test 将 SF 设置为结果的符号,并将 OF 设置为零。所以如果edi 是负数,它会跳转。
猜你喜欢
  • 2013-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 2014-01-19
  • 1970-01-01
  • 2011-04-08
相关资源
最近更新 更多