1
我在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上运行这个使用asm
和fasm
命令,这是我的cmd
不识别的命令。
我的操作系统:Windows 10
你不*运行*汇编代码。这是一种人类可读的编程语言,汇编程序可以汇编成目标代码,然后将其馈入链接器以生成可执行映像。这就像C代码,它同样不能从命令行*“运行”*。 – IInspectable
这只是你的另一种编程语言的.c文件,你仍然需要组装并链接它。 gnu工具实际上允许你使用c编译器来完成这个工作,你应该可以将它提供给gcc,并且它会理解它是汇编语言而不是C,并且一旦组装完成,就会为你调用链接器,就像它喂食它时一样一个.c文件。理想情况下,链接它为您的目标主机,所以它只是运行。然后你可以例如在汇编语言中修改ascii字符串在a + b中添加更多字符,通过gcc重新运行以查看它实际上是正在使用的这个asm。 –
@old_timer。 'gcc prog.s'生成一个可执行文件。我跑了它,并得到预期的结果。然后我将汇编代码中的'a'从5更改为6,然后再次输入命令。运行修改后的'.exe'并得到'14'。谢谢!我确定这是我的CPU即将运行的机器代码... –