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即將運行的機器代碼... –