所以我在做下面的问题,使汇编代码变成C(汇编代码还是很新的)假设您知道,当将具有原型long解码器4(long x,long y,long z)的函数编译为汇编代码时,代码的主体如下
addq %rsi, %rdi
imulq %rdx, %rdi
movq %rdi, %rax
sarq $15, %rax
salq $31, %rax
andq %rdi, %rax
ret
参数x,y和z传递到寄存器%rdi,%rsi和%rdx。该代码将返回值存储在寄存器%rax中。
我对代码的解释方式如下:
long w =(x+y)*z;
w=(w>>15);
w=(<<31);
return x&w;
请查看我的代码,请保持友好!
是的,您的解释是正确的。只是添加。该代码也可以是-
addq %rsi, %rdi => x = x + y
imulq %rdx, %rdi => x = x*z
movq %rdi, %rax => w = x
sarq $15, %rax => w = w >> 15
salq $31, %rax => w = w << 31
andq %rdi, %rax => w = w & x
ret => return w
+++++++++++++++++++++++++++++++++++++++++++++++++++
long w;
x=(x+y)*z;
w=((x>>15)<<31);
return x&w;
这完全取决于编译器决定如何将其转换为asm,有时还添加了自己的优化。如果需要,您不能将其最初完全转换为C代码。
但是你可以做相反的事情。从C文件生成一个asm文件。
gcc -O2 -S -c file.c
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句