c - 汇编到 C 翻译 : Order of Local variables?

标签 c assembly

好吧,我正在尝试将这个程序集翻译成 C 语言。

所以我的困惑在于第 7 行,其中似乎 2 * x 存储在变量 i 中。但这似乎不符合C代码的顺序。我对这个的解释是错误的吗?它实际上是将 2 * x 存储到 val 中吗?

组装:

Assembly version

C:

C version

最佳答案

我没有看到你的C代码,但汇编代码足够清晰。它将参数添加到自身并将其存储在局部变量中。

编辑:现在我看到了 C 代码。看来在地址-4(%ebp)处有变量val,这就是对应的代码

int val = 2 * x;

顺便说一句,检查堆栈中变量的顺序很容易。编写一个简单的程序

#include <stdio.h>

int main(void) 
{
    int a[1] = { 0 };
    int b = 0;

    a[1] = 15;

    printf( "%d\n", b );
    printf( "%d\n", a[0] );


    return 0;
}

如果输出 15,则编译器以相反的顺序将变量放入堆栈。我在 www.ideone.com 上使用 GCC 测试了这段代码,并得到了预期的结果

15
0

关于c - 汇编到 C 翻译 : Order of Local variables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26443350/

相关文章:

c++ - YASM 程序集在 jitted 函数中调用 stdout.write

c - 如何从 x86 汇编程序中执行 C 程序?

c - C 中的嵌套循环展开

c - 大小();返回嵌入式 C 中指定数组的值的两倍

c - gdb 检查和打印给出不同的值

c - 在 C linux 程序中取消链接多个文件

C中的契约(Contract)设计模式

assembly - 如何将 ADD 指令与 MASM 一起使用?

performance - 在大多数现代 64 位处理器上, `mulq` 的速度是否取决于操作数?

windows - 为什么中断 0x2A 在 x64 中不起作用?