【问题标题】:How do you translate the following code to Intel Assembly code (x86)? [duplicate]您如何将以下代码转换为英特尔汇编代码 (x86)? [复制]
【发布时间】:2021-03-16 19:38:17
【问题描述】:

我正在尝试转换为 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);

【问题讨论】:

  • 用 gcc -S 编译,看看生成的代码,godbolt,org对此很有用,
  • 旁白:acc 保持不变0 因为任何东西乘以0 就是0

标签: c assembly x86 intel


【解决方案1】:

如果您使用 Visual Studio 之类的 IDE,则可以针对 x86 平台并使用 Disassembly 窗口查看程序集。

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

【讨论】:

  • 如果您要阅读 asm 以获得一个小的简单循环,通常需要一些优化。对于更大更复杂的东西,它可能会变成一团糟,但对于小东西,优化主要是消除噪音,特别是如果你只启用gcc -Og 最小优化。它有助于编写一个接受 args 的函数,否则常量传播将在编译时计算更多的东西。例如godbolt.org/z/r6ofzP
  • 感谢您的反馈,我相应地编辑了我的答案。
猜你喜欢
  • 2011-04-29
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 2014-12-10
  • 2020-11-04
  • 2013-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多