附件总成至C
正在学习汇编程序,我有以下代码需要翻译成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){},它从加法和乘法行返回一些东西。除此之外,我迷路
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后者是我必须做的。我只是想自己解决问题,却没有得到结果。