编写基于程序集32位(x86)的c代码

时间:2014-03-27 20:09:25

标签: c assembly x86

我有这段代码,我必须从汇编转换为c。我必须将函数的汇编代码转换为该函数的c代码。

function :
  1.pushl %ebp           
  2.movl %esp, %ebp      
  3.movl 12(%ebp), %eax                               
  4.movl 8(%ebp), %edx                          
  5.addl %edx, %eax                             
  6.addl 16(%ebp), %eax                          
  7.popl %ebp                
  8.ret               

我为了解释目的对行进行了编号。以下是我认为每一行都在做的事情:

1.Save frame pointer by moving it onto the stack. 
2. Create new frame pointer
3. Assigns value of the second parameter, which is 12 bytes above the base pointer, to the register eax
4. Assigns value of first parameter which is 8 bytes above base pointer to the register edx
5. Adds edx to the value in eax and stores the value in eax
6. Adds the value in third parameter which is 16 bytes about the base pointer, to the register eax
7.pops base pointer off of stack
8. returns the calling function

现在我无法真正理解如何将其转换为c代码。我认为代码看起来有点像这样:

function (int *x, int *y, int *z){
*y = x + y;
*y = z + y; 
return y;  
}

我不确定它会是什么样的,但这就是我想出来的。我真的很难理解如何理解装配。这个翻译有意义吗?感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您对汇编代码的解释是正确的。我可能添加的一件事是,当函数返回一个值时,该值将在寄存器A中返回。所以C函数看起来像这样。

int function( int x, int y, int z )
{
    return x + y + z;
}