首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >x86-64汇编"cmovge“到C代码

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

Stack Overflow用户
提问于 2016-11-20 05:41:56
回答 1查看 2.7K关注 0票数 2

虽然我不应该列出我所给出的全部4行样本(因为这是一个家庭作业问题),但我不知道该如何阅读并翻译成C。

cmovge %edi, %eax

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

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

请给出几个cmovge指令如何转换成C代码的小例子。如果它作为自己的代码行没有意义,可以随意地用它来弥补。

这是在x8664程序集中通过一个虚拟化的Linux操作系统(CentOS 7)。

EN

Stack Overflow用户

回答已采纳

发布于 2016-11-20 05:48:22

我可能会给你一个完整的解决方案:

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

代码语言:javascript
复制
doit:
.LFB0:
    .cfi_startproc
    cmp edi, esi
    mov eax, esi
    cmovge  eax, edi
    ret
    .cfi_endproc
票数 4
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40701085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档