虽然我不应该列出我给出的整个 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/