Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
附件总成至C_C_Assembly_X86_Att - Fatal编程技术网

附件总成至C

附件总成至C,c,assembly,x86,att,C,Assembly,X86,Att,正在学习汇编程序,我有以下代码需要翻译成C: pushl %ebp movl %esp, %ebp movl 12(%ebp), %eax imull $886836204, %eax, %edx movl 8(%ebp), %eax addl %edx, %eax addl $629084528, %eax popl %ebp ret 我知道它有两个参数,格式是intfunc(int1,int2){},它从加法和乘法行返回一些东西。除此之外,我迷路

正在学习汇编程序,我有以下代码需要翻译成C:

pushl   %ebp
movl    %esp, %ebp
movl    12(%ebp), %eax
imull   $886836204, %eax, %edx
movl    8(%ebp), %eax
addl    %edx, %eax
addl    $629084528, %eax
popl    %ebp
ret

我知道它有两个参数,格式是
intfunc(int1,int2){}
,它从加法和乘法行返回一些东西。除此之外,我迷路了。这在C中是什么样子的?

我想说
int func(int a,int b){返回b*886836204+a+629084528;}
我很确定这是一个单行返回,因为它不会在堆栈上为局部变量分配内存,但逻辑看起来是这样的:

int function(int x, int y){
    int eax;
    int edx;

    eax = x;

    edx = 886836204 * eax;

   eax = y;
   eax = eax + edx;
   eax = eax + 629084528;

return eax;
return x * 886836204 + (x + y)  + 629084528;
}

大概是这样的:

int function(int x, int y){
    int eax;
    int edx;

    eax = x;

    edx = 886836204 * eax;

   eax = y;
   eax = eax + edx;
   eax = eax + 629084528;

return eax;
return x * 886836204 + (x + y)  + 629084528;

@的确如此。这正是我所想的。有两种方法。第一种方法是模拟汇编指令正在执行的操作(提示:您需要一个堆栈实现和一些注册表变量)。第二种方法是找出汇编语言正在完成什么,然后编写完成同样任务的C代码。就我个人而言,我投票支持后一种方法。然后还有一个提示:
gcc-S
将C代码编译成汇编,这样你就可以测试你的理论了。很遗憾,…@RobertHarvey后者是我必须做的。我只是想自己解决问题,却没有得到结果。