虽然我不应该列出我给出的整个4行样本,(因为这是一个家庭作业问题)但我很困惑应该如何阅读并将其翻译成C.
cmovge %edi, %eax
到目前为止我所理解的是,当结果为> =时,指令是一个有条件的移动。它将函数%edi
的第一个参数与整数寄存器%eax
(在前一个汇编代码行中分配了另一个参数值%esi
)进行比较。但是,我不明白它的结果。
我的问题是解释优化的代码。它不会操纵堆栈,我不知道如何在C中编写它(或者至少是gcc
开关,我甚至可以在编译时使用它来生成相同的结果。)
有人可以举几个小例子说明cmovge
指令如何转换为C代码吗?如果它作为自己的代码行没有意义,请随意使用它。
这是通过虚拟化Linux操作系统(CentOS 7)进行的x86-64汇编。
答案 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