我在 C
中有这个相对简单的程序
打印两个 int
的总和:
#include <stdio.h>
int main()
{
int a = 5;
int b = 8;
printf("a + b = %d", a+b);
getchar();
}
我使用以下命令生成汇编代码:gcc -S prog.c
以获取汇编代码。
.file "prog.c"
.def ___main; .scl 2; .type 32; .endef
.section .rdata,"dr"
LC0:
.ascii "a + b = %d\0"
.text
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
LFB10:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
andl $-16, %esp
subl $32, %esp
call ___main
movl $5, 28(%esp)
movl $8, 24(%esp)
movl 28(%esp), %edx
movl 24(%esp), %eax
addl %edx, %eax
movl %eax, 4(%esp)
movl $LC0, (%esp)
call _printf
call _getchar
movl $0, %eax
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
LFE10:
.ident "GCC: (GNU) 5.3.0"
.def _printf; .scl 2; .type 32; .endef
.def _getchar; .scl 2; .type 32; .endef
如何从命令行运行此 prog.s
?所有搜索均导致使用 asm
和 fasm
命令在 Linux 上运行此程序,我的 cmd
无法识别这些命令。
我的操作系统:Windows 10
最佳答案
它只是您用另一种编程语言编写的 .c 文件,您仍然需要对其进行汇编和链接。 gnu 工具实际上允许您使用 c 编译器执行此操作,您应该能够将其输入 gcc 并且它会理解它是汇编语言而不是 C,并且一旦组装就会为您调用链接器,就像您输入它时一样.c 文件。理想情况下将它链接到您的目标主机,以便它运行。例如,您可以在汇编语言中修改 ascii 字符串,向 a + b 添加更多字符,重新运行 gcc 以查看正在使用的确实是这个 asm。
关于c - 如何从命令提示符编译和运行汇编程序源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42425268/