你能告诉我x86汇编中ja
(如果高于则跳转)和jnbe
(如果不低于或等于则跳转)指令之间的区别吗?我什么时候使用它们?他们给我不同的结果吗?
假设您指的是x86 汇编中的ja
和jnbe
助记符:没有区别;它们是完全相同指令的两种不同助记符。您可以查阅官方指令说明,看到它们对应于完全相同的机器码(77 cb表示 8 位“短”偏移量,0f 87 cw/cd表示 16 位或 32 位“近”偏移量)。
因此,这对机器来说没有区别,只有对阅读和维护代码的人类程序员来说没有区别。它使您可以自由地编写对于您的代码正在执行的操作看起来更直观的任何一种。
许多其他 x86 条件指令对于类似情况都有多个助记符。例如jb
,“如果低于则跳转”,在设置进位标志时精确跳转,使其与jc
“如果进位则跳转”相同的指令。但是拥有两个助记符意味着您可以编写如下内容:
add eax, ebx
jc there_was_a_carry
...
cmp ecx, edx
jb ecx_is_smaller
Run Code Online (Sandbox Code Playgroud)
add / jb
像和 之类的组合cmp / jc
相当于机器,但对于程序员来说不太清楚。