Ich habe dieses relativ einfaches Programm in C
, die die Summe von zwei ints
druckt:Wie kompilieren und starten Sie Assembler-Source von der Eingabeaufforderung?
#include <stdio.h>
int main()
{
int a = 5;
int b = 8;
printf("a + b = %d", a+b);
getchar();
}
ich den Assembler-Code mit diesem Befehl erzeugt: gcc -S prog.c
den Assembler-Code zu erhalten.
.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
Wie führe ich diese prog.s
von der Kommandozeile? Alle Suchen führten dazu, dass dies unter Linux mit asm
und fasm
Befehle ausgeführt werden, die nicht von meinem cmd
erkannt werden.
Mein Betriebssystem: Windows 10
Sie * Assemblercode * nicht ausführen. Es ist eine menschenlesbare Programmiersprache, die Assembler zu Objektcode zusammenfügen können, die dann in einen Linker eingegeben wird, um ein ausführbares Bild zu erzeugen. Es ist genau wie C-Code, der ebenfalls nicht über die Befehlszeile * ausgeführt werden kann. – IInspectable
Es ist nur Ihre .c-Datei in einer anderen Programmiersprache, die Sie noch zusammenbauen und verknüpfen müssen. Die Gnu-Tools ermöglichen es Ihnen, dies mit dem c-Compiler zu tun, Sie sollten dies in gcc einspeisen können und es wird verstehen, dass es Assemblersprache ist und nicht C und sobald sie zusammengestellt sind, ruft sie den Linker für Sie auf, so wie Sie es füttern eine .c-Datei. Und im Idealfall verknüpfen Sie es für Ihren Ziel-Host, so dass es nur läuft. Sie können dann zum Beispiel in der Assembler-Sprache die ASCII-Zeichenfolge ändern, fügen Sie weitere Zeichen zum a + b hinzu, durchlaufen Sie erneut gcc, um zu sehen, dass es wirklich diese ASM ist, die verwendet wird. –
@old_timer. 'gcc prog.s' erzeugte eine ausführbare Datei. Ich lief es und bekam das erwartete Ergebnis. Dann habe ich das "a" im Assembler-Code von 5 auf 6 geändert und den Befehl erneut eingegeben. Lief die modifizierte '.exe' und bekam' 14'. VIELEN DANK! Ich war mir sicher, dass es der Maschinencode war, den meine CPU gerade ausführt ... –