2014-08-29 48 views
4

我有一些x86代码看起来像:86 JAE指令

这是否有道理?

我以为跳跃应该发生,因为1大于或等于0,定义为JAE

+0

我认为JAE是基于进位标志,而不是以前的指令的价值? – user997112 2014-08-29 20:59:44

+2

FWIW,JAE不会将进位标志的值与其他值进行比较,只要进位标志为0,不管它为什么为0,它都会跳转。如果它是1,就像你说的那样,跳转不应该发生。 – 2014-08-29 22:45:22

回答

5

jaejnc相同,即如果CF == 0则跳转。所有3个助记符(包括jnb)之间的选择取决于程序员。 CF不是由mov设置的,而是由前面的指令设置的。在执行减法的比较指令(cmp)后推荐使用助记符jae。您可以在英特尔或AMD软件开发人员手册中获得更多详细信息。

5

jae表示如果大于或等于,则跳转。它会跳,如果进位标志等于0

您正在寻找jnaejb

+0

我不想找任何东西:)我正在看包含jae的代码,CF是零并且跳没有被采取? – user997112 2014-08-29 20:58:34

+0

你一定在看一些不对的地方,因为这不是怎么样的行为 – Nowayz 2014-08-29 21:02:39

+0

在Visual Studio中进行调试时,我可以看到进位标志的值,当我介入时,调试器不会跳转到分支的地址,只是继续它。 – user997112 2014-08-29 21:06:04