x86-64 的条件跳转如何工作?

How does conditional jump of x86-64 works?

我在学习 x86-64 时对条件分支很困惑。

compq %rax,%rdi
jl .L2

哪个理解正确?

  1. 如果 %rax < %rdi,跳转到 L2
  2. 如果 %rax > %rdi,跳转到 L2

x86-64 中没有 compq。在比较 AT&T 语法中的 64 位操作数时,CMP 将是 cmpq

使用 Intel 语法时会更清楚,因为 AT&T 交换了目的地和来源,这将是 more confusing on instructions like cmp and sub

cmp rdi, rax
jl .L2

Jcc instructions 总是比较第一个操作数和第二个操作数。在这种情况下,它会在 rdi < rax

时跳转
  • What does JL mean in at&t syntax?