当前位置: 首页 > 知识库问答 >
问题:

如何将下面的代码翻译成英特尔汇编代码(x86)?[复制]

楚意
2023-03-14

我试图翻译成x86汇编,以帮助我更好地理解在x86汇编中编码的概念,我觉得自己被困在了如何开始编写这段代码上。

int temp = 0;
int acc = 0;

for(int i = 0; i < 20; i++)
{
    temp = temp + i;
    if (temp > 5)
    {
           acc = acc * temp;
    }
}
printf(“Answer is %d\n", acc);

共有1个答案

沙星波
2023-03-14

如果使用像VisualStudio这样的IDE,则可以将x86平台作为目标,并使用“反汇编”窗口查看程序集。

请记住,标志将更改生成的程序集,因此我将确保相应地调整优化。

 类似资料:
  • 如这个问题所示,使用g,我可以< code > g-S-masm = Intel test . CPP 。另外,使用clang,我可以执行< code>clang -S test.cpp,但是clang不支持< code>-masm=intel(编译期间未使用的< code >警告参数:-masm=intel)。我如何用clang得到intel语法?

  • 下面的groovy代码在脚本构建中运行良好。格拉德尔: 我不能成功地将它的语法翻译成kotlin build.gradle.kts。有人能给我正确的翻译吗?

  • 让我们用一个简单的C代码来设置寄存器: 当我使用1级优化为ARM(ARM none eabi gcc)编译此代码时,汇编代码如下所示: 看起来地址111111被解析到最接近的4K边界(110592)并移动到r3,然后通过将519添加到110592 (=111111)来存储值4096(0x1000)。为什么会这样? 在x86中,组装非常简单:

  • 至少在GCC中,如果我们提供生成汇编代码的选项,编译器会通过创建一个包含汇编代码的文件来服从。但是,当我们简单地运行命令而没有任何选项时,它不会在内部生成汇编代码吗? 如果是,那么为什么它需要首先生成一个汇编代码,然后将其翻译成机器语言?

  • 问题内容: 我想分解一下我拥有的可引导x86磁盘的MBR(前512个字节)。我已将MBR复制到使用 对可以反汇编文件的Linux实用程序有何建议? 问题答案: 您可以使用objdump。根据本文的语法为:

  • 我已经将本文中的主要测试代码(此处是原始代码的链接)转换为处理。在测试它时,我发现它适用于低于10,000,000的数字,但它跳过了一些高于该数字的素数。 这是我的翻译(除了表格是相同的)。 编辑:我发现了问题。处理的int(long)转换为浮点数,然后转换为int,这会导致舍入错误。使用(int)long修复了问题。这是代码的工作(并且稍微优化)版本。 此版本仅适用于有符号整数。由于某种原因简单