当我试图辨别汇编语言时,我现在非常困惑。我被要求将以下 x86-84 代码转换为 Y86-84:
long arith(long int x, long int y, long int z) {
return (x+y+z) & (x+4+48*y);
}
在 x86-64 中:
arith:
leaq (%rsi, %rsi, 2), %rax
salq $4, %rax
leaq 4(%rdi, %rax), %rax
addq %rdi, %rsi
addq %rdx, %rsi
andq %rsi, %rax
ret
在我转换之前,我很难理解 x86-64 中发生了什么。我将非常感谢任何能引导我了解这段代码中发生的事情的人。