把汇编代码转化成C代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了把汇编代码转化成C代码相关的知识,希望对你有一定的参考价值。

一个函数的原型为
int decode2(int x,int y,int z);
将这个函数编译成IA32汇编代码。代码体如下:
x at %ebp+8,y at %ebp+12,z at %ebp+16
1 movl 16(%ebp),%edx
2 sub1 12(%ebp),%edx
3 movl %edx,%eax
4 sall $15,%eax
5 sarl $15,%eax
6 xorl 8(%ebp),%edx
7 imull %edx,%eax
参数x,y,z存放在存储器中相对于寄存器%ebp中地址偏移量为8,12和16的地方,代码将返回值存放在寄存器%eax中。
写出等价于我们汇编代码的decode2的C代码

基本上等价于下面这条语句:
return (((z - y) & 0x0001ffff) * ((z - y) ^ x));

%edx中保存(z - y)的值,将这个值赋给%eax后,%eax进行左移和右移15位其实就是对高15位置零,即(z - y) & 0x0001ffff.
xorl 8(%ebp),%edx等价于(z - y) ^ x

最后将两个结果相乘.
参考技术A

以上是关于把汇编代码转化成C代码的主要内容,如果未能解决你的问题,请参考以下文章

怎样能将汇编语言转换成c语言

c语言怎么把UTF-8转换成Unicode

C语言怎么把word转化成pdf并输出?

编译汇编链接加载

C语言写的程序 怎么反汇编成汇编语言

c语言怎么把UTF-8转换成Unicode