【问题标题】:I need to convert my code written in C(.c) to assembly(.asm). I am very new to writing in C and now I need to learn how to write in assembly我需要将我用 C(.c) 编写的代码转换为汇编(.asm)。我对用 C 编写非常陌生,现在我需要学习如何用汇编编写
【发布时间】:2019-08-25 11:25:24
【问题描述】:

我需要将我的 C 代码转换成程序集

这是我需要转换成汇编(.asm)的C代码

int main()
{
   //Variables that stores the numbers
   int num1, num2, num3;
   // Variable that stores the result
   int result;
   // Asking the user to input the value of num1
   printf("Enter the first number:");
   scanf("%d",&num1);
   // Asking the user to input the value of num2
   printf("Enter the second number:");
   scanf("%d",&num2);
   // Asking the user to input the value of num3
   printf("Enter the third number: ");
   scanf("%d",&num3);
   //Performing the operation
   result = num3 - (num1 + num2);
   //Printing the result
   printf("The value of result is: %d",result);
   return 0;
}

【问题讨论】:

  • C 代码由通常称为 C 编译器的程序转换(翻译)为汇编。
  • 这取决于一个:你为什么需要这个? b:您希望程序集处于哪种架构中?如果您不熟悉 C 和 ASM - 我建议您先学习这些东西,然后再应对这个复杂的挑战。
  • 我将从学习汇编语言开始。此外,一些编译器可以选择在编译时从 C 代码为您生成汇编语言。
  • 你还需要用汇编语言写scanf & printf吗?

标签: c assembly


【解决方案1】:

理论上你可以使用 gcc 编译它并命令它生成 asm 列表(这将是汇编程序),所以你可以将它的扩展名更改为 .asm (https://www.systutorials.com/240/generate-a-mixed-source-and-assembly-listing-using-gcc/)

一般来说,在汇编中包含 scanf 和 printf 或任何库函数是个坏主意(因为它们在 asm 中可能非常长,特别是系统调用,例如 read/write/open、printf)。

如果你在大学里有人要求你用 ASM 写一些东西,他们会知道这不是你写的。

同样从标题来看,盯着 C 列表学习 ASM 是不可能的(例如由于过程调用上的堆栈操作)。

【讨论】:

    【解决方案2】:

    正如 Antti Haapala 所说,通常的 gcc 可以解决问题。你会得到一个编译好的二进制文件,你可以用命令读取它:

    objdump -d file
    

    您有很多工具,可以帮助您读取二进制文件,例如gdb,xxd,objdump,...
    还有Ghidra,它是新的,但我不确定这个。

    【讨论】:

      【解决方案3】:

      如果你想用gcc 直接编译成程序集,你可以使用-S 选项。来自 gcc 手册页:

      -S 编译阶段后停止;不要组装。对于每个指定的非汇编程序输入文件,输出采用汇编程序代码文件的形式。

      默认情况下,源文件的汇编文件名是通过将后缀 .c、.i 等替换为 .s 来生成的。

      不需要编译的输入文件会被忽略。

      【讨论】:

        猜你喜欢
        • 2012-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-19
        • 2017-02-13
        • 2015-04-26
        • 2012-04-21
        • 1970-01-01
        相关资源
        最近更新 更多