3 c assembly decompiling x86-64
虽然我不应该列出给定的整个 4 行示例(因为这是一个家庭作业问题),但我很困惑应该如何读取它并将其翻译成 C 语言。
cmovge %edi, %eax
到目前为止我所理解的是,该指令是当结果 >= 时的条件移动。它将函数的第一个参数%edi与整数寄存器(在上一行汇编代码中%eax分配了另一个参数值)进行比较。%esi但是,我不明白它的结果。
我的问题是解释优化后的代码。它不操作堆栈,而且我不确定如何用 C 语言编写它(或者至少gcc我什至可以在编译时使用开关来生成相同的结果)。
有人可以举几个小例子来说明如何cmovge将指令转换为 C 代码吗?如果它本身的代码行没有意义,请随意用它来弥补。
这是通过虚拟化 Linux 操作系统 (CentOS 7) 在 x86-64 中进行的组装。
我可能在这里为您提供整个解决方案:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3136 次 |
| 最近记录: |