繁体   English   中英

汇编代码到C实践

[英]Assembly code to C practice

在此输入图像描述

所以我做了以下问题,使汇编代码为C(仍然是汇编代码的新东西)假设你知道当一个带有原型long decode4(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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM