Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我需要将用C(.C)编写的代码转换为程序集(.asm)。我对C语言的编写非常陌生,现在我需要学习如何用汇编语言编写_C_Assembly - Fatal编程技术网

我需要将用C(.C)编写的代码转换为程序集(.asm)。我对C语言的编写非常陌生,现在我需要学习如何用汇编语言编写

我需要将用C(.C)编写的代码转换为程序集(.asm)。我对C语言的编写非常陌生,现在我需要学习如何用汇编语言编写,c,assembly,C,Assembly,我需要将我的C代码转换成程序集 这是我需要转换为assembly.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 num

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

这是我需要转换为assembly.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;
}

正如安蒂·哈帕拉(Antti Haapala)所说,通常的gcc会起作用。您将获得一个已编译的二进制文件,可以使用以下命令读取:

objdump -d file

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

理论上,您可以使用gcc编译它,并命令它生成asm列表,该列表将是汇编程序,因此您可以将它的扩展名更改为.asm

但一般来说,在汇编或任何库函数中包含scanf和printf都是不好的,因为它们在asm中可能非常长,特别是系统调用,例如读/写/打开、printf

以防万一,若你们大学里有人让你们用ASM写东西,他们会知道不是你们写的


同样从标题来看,开始学习带有C清单的ASM并不是一个好办法,因为例如过程调用上的堆栈操作

如果希望使用gcc直接编译到程序集,可以使用-S选项。从gcc手册页:

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

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

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


C代码由一个通常被称为C编译器的程序转换成汇编。这取决于a:为什么需要这个?和b:您希望程序集位于哪个体系结构中?如果您是C和ASM新手,我建议您在应对这一复杂挑战之前先学习这些东西。我会从学习汇编语言开始。此外,有些编译器在编译时可以选择从C代码生成汇编语言。您还需要用汇编语言编写scanf和printf吗?