GCC Assembler: Werte in Hex anzeigen

Gast #4667152
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/.
Persönliche Seite #4667234
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).
#4667438
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)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren