虽然我不应该列出我所给出的全部4行样本(因为这是一个家庭作业问题),但我不知道该如何阅读并翻译成C。
cmovge %edi, %eax
到目前为止,我理解的是,当结果是>=时,指令是有条件的移动。它将函数%edi的第一个参数与整数寄存器%eax (在上一条汇编代码行中为其他参数值%esi赋值)进行比较。然而,我不明白它的结果。
我的问题是解释优化的代码。它不操作堆栈,我也不知道如何用C编写它(或者至少我可以用gcc开关在编译时生成相同的结果)。
请给出几个cmovge指令如何转换成C代码的小例子。如果它作为自己的代码行没有意义,可以随意地用它来弥补。
这是在x8664程序集中通过一个虚拟化的Linux操作系统(CentOS 7)。
发布于 2016-11-20 05:48:22
我可能会给你一个完整的解决方案:
带有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_endprochttps://stackoverflow.com/questions/40701085
复制相似问题