c - x86-64 程序集 "cmovge"到 C 代码

标签 c assembly x86-64 decompiling

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

cmovge %edi, %eax

到目前为止,我的理解是该指令是结果为 >= 时的条件移动。它比较函数的第一个参数 %edi 和整数寄存器 %eax汇编代码行)。但是,我不明白它的结果。

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

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

这是通过虚拟化 Linux 操作系统 (CentOS 7) 在 x86-64 汇编中实现的。

最佳答案

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

整数 做(int a,int b){ 返回 a >= b ?一个:乙; } 使用 gcc -O3 -masm=intel 变为:

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

关于c - x86-64 程序集 "cmovge"到 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40701085/

相关文章:

c - Timespec 重新定义错误

c - C读取二进制文件

java - ASM 方法访问者可以与接口(interface)一起使用吗?

optimization - 将小数加载到 64 位 x86 寄存器中

c - 在C中的二进制文件中的某个整数后插入一个整数

C - 读()和写()

c - MIPS 结构节点

assembly - 在 x86 程序集中制作鼠标处理程序

c - 架构冲突?在 mac 上找不到体系结构 x86_64 的符号

c - 在核心之间共享数据的最有效方式