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