x86-64汇编“cmovge”到C代码

时间:2016-11-20 05:41:56

标签: c assembly x86-64 decompiling

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

cmovge %edi, %eax

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

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

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

这是通过虚拟化Linux操作系统(CentOS 7)进行的x86-64汇编。

1 个答案:

答案 0 :(得分:2)

我可能在这里给你完整的解决方案:

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