Forum: Compiler & IDEs c++ Code to Arm Assembler


von dabudai (Gast)


Lesenswert?

Hi,

könnte mir einer meinen c++ Code in Arm Assembler übersetzen lassen.
Die main-Funktion ist nicht von Nöten.
Ich brauche nur die Funktion.
Da ich die Funktion nicht in Assembler hinbekomme, will ich mir so ein 
paar Endrücke holen.
1
#include <string>
2
using namespace std;
3
4
int searchStringInString(const string& s, const string& suchen)
5
{
6
7
int pos = s.find(suchen);
8
return pos;
9
}
10
11
int    main (void)
12
{
13
    int    Adresse;
14
    char* Text="0111112";
15
    char* Suchstring="112";
16
    char* leerstring="";
17
18
    Adresse = searchStringInString(Text, Suchstring);
19
    Adresse = searchStringInString(leerstring, Suchstring);
20
    Adresse = searchStringInString(Text, leerstring);
21
    Adresse = searchStringInString(leerstring, leerstring);
22
    Adresse = searchStringInString(Text, Text);
23
    Adresse = searchStringInString(Suchstring, Suchstring);
24
    Adresse = searchStringInString(Suchstring, Text);
25
    return 0;    
26
}

von Peter (Gast)


Lesenswert?

Ich glaube kaum das jemand mal schnell ebend von C++ in ASM umsetzt. 
Fang doch erstmal Selber an und Setze es auf C ohne externe 
Funktionsaufrufe um. (keine String-Funktion)
Wenn das dann gemacht ist, sollte die umwandlung zum ASM nicht mehr so 
schwer sein.

von dabudai (Gast)


Lesenswert?

Stimmt du hast ja recht.
Daher hier die reine C Funktion.
1
int searchStringInString(char *string, char *substring)
2
   {
3
       register char *a, *b;
4
   
5
       b = substring;
6
       if (*b == 0) {
7
           //return string;
8
      return 0;
9
       }
10
       for ( ; *string != 0; string += 1) {
11
           if (*string != *b) {
12
               continue;
13
          }
14
           a = string;
15
           while (1) {
16
               if (*b == 0) {
17
                   return (int)(a-string);
18
          //return string;
19
               }
20
               if (*a++ != *b++) {
21
                   break;
22
               }
23
           }
24
           b = substring;
25
       }
26
       return 0;
27
}

von Ralf S. (spacedog) Benutzerseite


Lesenswert?

Ich bin jetzt nicht mehr zu 100% sicher, aber ich glaube ich hab mal von 
so nem Programm gehört, das automatisch C in Assembler umwandeln kann. 
Das hiess glaube ich Kompeiler oder so. Weiss aber nicht, wo man das 
herunterladen kann und ob's das überhaupt noch gibt.

von dabudai (Gast)


Lesenswert?

In Arm-Code bekomme ich meinen Code nun.
Habes rausbekommen.
Allerdings habe ich in der Funktion einen Fehler drin.
Diese gibt mir nicht die Position des Suchstrings wieder,(es müsste 4 
herauskommen, da der Suchstring an 4 STelle im Hauptstring steht) 
sondern, er gibt mir die Größe des Suchstrings aus.

von dabudai (Gast)


Lesenswert?

Moin Moin,

habe noch eine kleine Frage an die Experten.
Besteht beim gcc die Möglichkeit, die Assemblyausgabe mit C-Quellcode zu 
bekommen?
Beim Visual Express besteht die Möglichkeit.
Wie schauts da beim gcc aus?

von Gast (Gast)


Lesenswert?

Wenn ich per JTAG mit Eclipse debugge, habe ich zwei Fenster: Links den 
C-Code und rechts den dazugehörigen Assemblercode. Es gibt also eine 
Möglichkeit.

von Jörg G. (joergderxte)


Lesenswert?

gcc -S <source>.c
Bzw. die .lst (oder auch .lss) Datei?

von Sven P. (Gast)


Lesenswert?

Ach du liebe Zeit... wird wenigstens GCC verwendet? Dann:
1
gcc -S

Der ganz klassische Ablauf ist:
- Quelltext in Hochsprache (C, C++) schreiben
- Quelltext übersetzen (compilieren), dabei entsteht Assemblercode
- Assemblercode assemblieren, dabei entstehen Maschinencodemodule
- Maschinencodemodule binden (linken), es entsteht das ausführbare 
Objekt
- brennen/ausführen/...

Achso, nochwas gleich vorweg: GCC ist nicht der GNU-C-Compiler...

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.