【发布时间】:2014-05-11 21:18:46
【问题描述】:
我正在将汇编语言转换为 C 程序。我知道在下面的函数中,有一个参数设置为等于 0,并将其与某物进行比较(我不确定这是什么让我感到困惑)。如果 x 小于或等于与之比较的任何值,则函数将跳转到 f2 ,然后将 0 复制到局部变量中,但如果不是,它将 1 复制到局部变量中并将其复制到返回的寄存器 a 中.我不明白在前几行中将参数与什么进行比较。谁能指出我正确的方向?
这里是语言:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
cmpl $0, 8(%ebp)
jle . f2
movl $1, -4(%ebp)
jmp. f3
.f2:
movl $0, -4(%ebp)
.f3:
movl -4(%ebp), %eax
leave
ret
这就是我认为它在 C 中的样子:
fn(int x)
{
x = 0;
if x <= ? :
int y = 0;
else
int y = 1;
}
return y;
在此感谢您
【问题讨论】:
-
为了回答这个问题,你需要:(1)能够理解上面的汇编代码,(2)熟悉C语法并至少写过一些简单的C 程序。如果你不能同时做这两件事,你就没有希望从要求其他人为你解决这个问题中学到任何东西。
-
@Greg -- 讽刺的是,随便 td;lr 阅读这段代码只会让人有点失望“就是这样吗?”。我想我通过了你的 (1)+(2) 测试;-)
-
我熟悉C和汇编语言,那我先说清楚。我看到有一个参数设置为等于 0,并将它与我不确定的东西进行比较,这就是我感到困惑的原因。如果 x 小于或等于与之比较的任何值,则函数将跳转到 f2 ,然后将 0 复制到局部变量中,但如果不是,它将 1 复制到局部变量中并将其复制到返回的寄存器 a 中??
-
嗯,听起来您实际上已经了解了大部分功能。您的问题没有那么详细,因为“对正在发生的事情感到困惑” 不会激发信心。也许您可以编辑您的问题以询问具体说明。表明你确实知道大部分发生的事情。