如何从命令提示符编译和运行汇编程序源?

时间:2017-02-23 20:11:31

标签: c windows gcc assembly command-line

我在function resetClick() { var tempChanged = "X"; var tempTemplate = ""; if (tempChanged == "X" && tempTemplate != "X") { if (confirm("Modification in progress , do you wish to save?")) <!-- changed okcode from reset to /8 so that the exit command code will be used. --> <!-- SetOkCode("netmzps_0000004_100", "/8"); --> SettingOkCode("/8", "netmzps_0000004_100","","",""); } else <!-- changed okcode from reset to /8 so that the exit command code will be used. --> <!-- SetOkCode("neetmzps_0000004_100", "/8"); --> SettingOkCode("/8", "netmzps_0000004_100","","",""); } <a href="javascript:resetClick();" class="TELUSHighlightButton" name="&nbsp;&nbsp;&nbsp;&nbsp;Start over&nbsp;&nbsp;&nbsp;&nbsp;" title="Click here to initialise all fields." onmouseover="status=' ';return true;" onmouseout="status=' ';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Start over&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a> 中有这个相对简单的程序 它打印两个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无法识别的asmfasm命令在Linux上运行此操作。

我的操作系统:Windows 10

1 个答案:

答案 0 :(得分:1)

只是您的.c文件在另一种编程语言中,您仍需要组装和链接它。 gnu工具实际上允许你使用c编译器执行此操作,你应该能够将它提供给gcc并且它将理解它是汇编语言而不是C并且一旦汇编就会为你调用链接器,就像它在你提供它时一样一个.c文件。理想情况下,它将链接到您的目标主机,以便它运行。然后,您可以使用汇编语言修改ascii字符串,将更多字符添加到a + b,重新运行gcc,看看它是否正在使用asm。