Forum: Compiler & IDEs GCC Assembler: Werte in Hex anzeigen


von Steffen Hausinger (Gast)


Lesenswert?

Hallo zusammen,

ich verwende gcc mit der Option "-S", um mein C Programm in Assembler zu 
übersetzen. Das funktioniert soweit ganz prima, allerdings mit einem 
Schönheitsfehler: Mir werden im übersetzten Assemblercode alle Werte in 
Dezimalform dargestellt.

Beispiel (Motorola 68000 Prozessor):
Aufruf per "m68k-elf-gcc -S MySource.c"

Quelle
1
CCW[0] = 0x0140;

Übersetzung - Ist
1
move.w #320,-3536.w

Übersetzung - Soll
1
move.w #$140,$F230.w



Wie kann ich mir die Werte in Hexadezimalform anzeigen lassen? Gibt es 
dafür eine Option?

Schöne Grüße
Steffen

P.s.: Ich habe den gcc hier heruntergeladen: 
https://sourceforge.net/projects/mingw-gcc-68k-elf/.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Die Darstellung des eigentlichen Codes lässt sich nicht anpassen.

Was geht ist -dP, das zusätzlich zu jeder insn deren interne 
RTL-Darstellung anzeugt, welche idR auch hex-Darstellung von Konstanten 
beinhaltet.

Beispiel:
1
int get_x (void)
2
{
3
    return -12345;
4
}

mit einem avr-gcc -S -Os -dP gibt das
1
 ; (insn 9 2 10 (set (reg/i:HI 24 r24)
2
 ;         (const_int -12345 [0xffffffffffffcfc7])) foo.c:23 83 {*movhi}
3
 ;      (nil))
4
  ldi r24,lo8(-57)   ;  9  *movhi/5  [length = 2]
5
  ldi r25,lo8(-49)

Übrigens genügt um .s zu erzeugen (bzw. nicht zu löschen) ein 
-save-temps, etwa zusammen mit -c (preprocess, compile and assemble).

von Markus F. (mfro)


Lesenswert?

Bei mir kommt da (bei einem "echten" C-Programm) haufenweise (zumindest 
für mich) unlesbares Kauderwelsch. Dann lieber ein objdump -d auf das 
Binary.

Dann hat man die HEX-Darstellung in den Binärspalten und kann das 
Disassembly noch einigermassen lesen:
1
int tfunc(int i, int j[])
2
{
3
        int a = j[i];
4
        j[99] = 1;
5
}

gibt das:
1
00000000 <_tfunc>:
2
   0:   4e56 fffc       linkw %fp,#-4
3
   4:   202e 0008       movel %fp@(8),%d0
4
   8:   d080            addl %d0,%d0
5
   a:   d080            addl %d0,%d0
6
   c:   d0ae 000c       addl %fp@(12),%d0
7
  10:   2040            moveal %d0,%a0
8
  12:   2d50 fffc       movel %a0@,%fp@(-4)
9
  16:   202e 000c       movel %fp@(12),%d0
10
  1a:   0680 0000 018c  addil #396,%d0
11
  20:   7201            moveq #1,%d1
12
  22:   2040            moveal %d0,%a0
13
  24:   2081            movel %d1,%a0@
14
  26:   4e5e            unlk %fp
15
  28:   4e75            rts

(396 dec = 18c hex)

: Bearbeitet durch User
von Steffen Hausinger (Gast)


Lesenswert?

Vielen Dank für Eure Antworten! Ich werde mir ein Skript schreiben, das 
die Ausgabe nachträglich umwandelt.

Schöne Grüße
Steffen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.