【发布时间】:2017-07-14 11:54:35
【问题描述】:
我在C 有这个相对简单的程序
打印两个ints的总和:
#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?所有搜索都导致在 Linux 上使用我的cmd 无法识别的asm 和fasm 命令运行它。
我的操作系统:Windows 10
【问题讨论】:
-
你不会“运行”汇编代码。它是一种人类可读的编程语言,汇编器可以将其汇编成目标代码,然后将其输入链接器以生成可执行映像。就像 C 代码一样,同样不能在命令行中"run"。
-
它只是你的另一种编程语言的 .c 文件,你仍然需要组装和链接它。 gnu 工具实际上允许您使用 c 编译器执行此操作,您应该能够将其输入 gcc,它会理解它是汇编语言而不是 C,并且一旦组装,就会像您输入它时那样为您调用链接器.c 文件。理想情况下将它链接到您的目标主机,以便它运行。然后,您可以例如在汇编语言中修改 ascii 字符串,在 a + b 中添加更多字符,重新运行 gcc 以查看正在使用的确实是这个 asm。
-
@old_timer。
gcc prog.s生成了一个可执行文件。我运行它并得到了预期的结果。然后我将汇编代码中的a从 5 更改为 6 并再次键入命令。运行修改后的.exe并得到14。谢谢!我确定这是我的 CPU 即将运行的机器代码......
标签: c windows gcc assembly command-line