2017-02-23 2 views
1

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

+3

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

+1

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. –

+0

@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 ... –

Antwort

1

Es ist nur Ihre C-Datei Sie noch in einer anderen Programmiersprache müssen sie montieren und verknüpfen. 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.

Verwandte Themen