2016-08-01 17 views
2

mit einem einfachen C-Programm Kompilieren mitgcc -masm = Intel gibt mir Klein Mnemotechnik

gcc -masm=intel basic.c -o basic.asm 

generierte Assembly wie unten:

.cfi_startproc 
    push rbp 
    .cfi_def_cfa_offset 16 
    .cfi_offset 6, -16 
    mov rbp, rsp /I expected mov to be MOV 
    .cfi_def_cfa_register 6 
    mov QWORD PTR [rbp-8], OFFSET FLAT:.LC0 
    mov eax, 0 
    pop rbp /I expected pop to POP 
    .cfi_def_cfa 7, 8 
    ret 
    .cfi_endproc 

Ich bin auf einem Intel X86_64 Maschine und in der Intel Software Entwicklerhandbuch, ich verstehe, die Mnemotechniken sind alle in Großbuchstaben dargestellt (was bedeutet, dass sie vorschlagen, es zu verwenden?).

Gibt es eine Option mit gcc, die mir Großbuchstaben Mnemonik gibt?

+1

Es ist nur eine Frage des Stils; Keiner der x86-Assembler, die ich kenne, unterscheidet zwischen Groß- und Kleinschreibung, und die meisten "aktuellen" Debugger, die ich verwende (gdb, VC++, WinDbg), verwenden kleingeschriebene Mnemotechniken. Persönlich finde ich Kleinbuchstaben besser lesbar. –

+0

@MatteoItalia Ich sehe, danke gute Nachricht :) – sjsam

Antwort

2

FYI, um das "Rauschen" in gcc asm Ausgang (.cfi Direktiven, unbenutzte Etiketten, etc.) zu entfernen, siehe How to remove "noise" from GCC/clang assembly output?. TL: DR: einfach den Code setzen auf http://gcc.godbolt.org/


In der Intel Software Entwickler-Handbuch werden die Mnemotechnik alle Großbuchstaben dargestellt (was bedeutet, dass sie es empfehlen die Verwendung?).

Ich denke, sie alle in Großbuchstaben als Alternative zu Code-Formatierung verwenden, also können sie Sachen wie „Performs a bitwise AND operation“ ohne Verwirrung schreiben (weil „bitweise und Betrieb“ ist auch eine gültige englische Phrase). Sie hätten mit "eine bitweise and Operation ausführen" können, aber sie taten es nicht.

Ihre Verwendung von Großbuchstaben für Mnemonics und Register-Namen ist kein Vorschlag, dass es der richtige Weg ist, zu codieren. Die Tutorials/Artikel von Intel enthalten oft Teile von Asm-Code (like this one about detecting AVX). In Listing 1 verwenden sie kleingeschriebene Mnemonics und Registernamen für alles außer XGETBV, was ich denke, dass sie es hervorheben, denn das ist die neue Anweisung, über die sie Sie unterrichten. Ihre intrinsics guide verwendet auch Kleinbuchstaben Mnemonics im Feld, die zeigen, welcher Befehl ein Mnemonic zugeordnet ist (Compiler-Optimierung kann verschiedene Insns wählen ...).

In Mnemonik- und Registernamen wird nicht zwischen Groß- und Kleinschreibung unterschieden. Die meisten Menschen bevorzugen Kleinbuchstaben. Guter Stil umfasst auch das Einrücken Ihrer Operanden in eine konsistente Spalte und dasselbe für Kommentare, sodass Ihr Code nicht ganz ausgefranst aussieht. Und immer einrücken Sie Ihren Code mehr als Etiketten, so dass Sie schnell Etiketten (Verzweigungsziele) sehen können. Zum Beispiel zeigt dieses Bit von the source for a golfed (smallest code-size) Adler-32 in x86-64 machine code, was ich denke, ist ziemlich guter Stil.

xor  eax,eax   ; scratch reg for loading bytes 
    cdq      ; edx: high=0 
    lea  edi, [rdx+1] ; edi: low=1 
    ;jrcxz .end   ; We don't handle len=0. unlike rep, loop only checks rcx after decrementing 
.byteloop: 
    lodsb     ; upper 24b of eax stays zeroed (no partial-register stall on Intel P6/SnB-family CPUs, thanks to the xor-zeroing) 
    add  edi, eax  ; low += zero_extend(buf[i]) 
    add  edx, edi  ; high += low 
    loop .byteloop 
.end: 
    ;; exit when ecx = 0, eax = last byte of buf 
    ;; lodsb at this point would load the terminating 0 byte, conveniently leaving eax=0 

Siehe auch diese NASM style guide, aus dem Wiki Tag verbunden.


Gibt es eine Option mit gcc, die mich Groß Mnemotechnik gibt?

Nein, Sie könnten Befehlsmnemoniks upcase und Registernamen mit sed oder etwas, wenn man wollte. (Aber Sie müssen aufpassen, dass Sie keine Symbolnamen fälschen, bei denen die Groß-/Kleinschreibung beachtet wird).

Das Muster-Matching in den Skripten, die http://gcc.godbolt.org/ Leistung könnte vielleicht dafür nützlich sein, aber ich habe nicht viel auf die js-Quelle geschaut.

+0

Supercool :) Schön erklärt & danke für die Links .. Und glaube mir, ich habe schon überlegt, ein kleines sed-Skript zu schreiben, um die Mnemonik in Großbuchstaben umzuwandeln ..;) – sjsam