x86-64 汇编 "cmovge" 到 C 代码

x86-64 Assembly "cmovge" to C code

虽然我不应该列出我给出的整个 4 行示例,(因为这是一个家庭作业问题)我很困惑应该如何阅读它并将其翻译成 C。

cmovge %edi, %eax

目前我的理解是该指令是当结果>=时的条件移动。它将函数的第一个参数 %edi 与整数寄存器 %eax 进行比较(在前一行汇编代码中为它分配了另一个参数值 %esi)。但是,我不明白它的结果。

我的问题是解释优化代码。它不操作堆栈,我不确定如何用 C 编写它(或者至少我什至可以在编译时使用 gcc 开关来生成相同的结果)。

有人可以举几个小例子说明 cmovge 指令如何翻译成 C 代码吗?如果它作为自己的代码行没有意义,请随意弥补它。

这是通过虚拟化 Linux 操作系统 (CentOS 7) 在 x86-64 程序集中。

我可能会在这里为您提供完整的解决方案:

int doit(int a, int b) { return a >= b ? a : b; } gcc -O3 -masm=intel 变为:

doit:
.LFB0:
    .cfi_startproc
    cmp edi, esi
    mov eax, esi
    cmovge  eax, edi
    ret
    .cfi_endproc