mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PPC assembler befehl für laden von GPR


Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich möchte mit assembler befehle eine Konstante 0x12345678 im general 
purpose register GPR5 speichern.
kann mir da jemand ein tip geben wie ich das machen kann?

Autor: Bernhard S. (b_spitzer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
GPR ist doch nur die Zusammenfassung aller Arbeitsregister (ohne FPR). 
Die heissen doch dann R0, R1... Ohne genaue Kenntnis des Assemblers 
würde ich mal
li R5, 0x12345678
tippen. Vielleicht hilft das ja:
http://www.ibm.com/developerworks/library/l-powasm1/index.html

Autor: Bernhard S. (b_spitzer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder doch nur
li 5, 0x12345678

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok danke das funktioniert.

ich will eigentlich eine C funktion (fcn1) aus einem assembler code 
aufrufen.

                .extern fcn1
fcn2:
                 # save register hier
                 ...

          # call the C extern funktion: dies funktioniert auch gut
    bl fcn1

    li 11, 0
    addi 11, 11, fcn1
    mtspr 9, 11
    bcctrl 0x0,0,0

    #resave the register hier
    ...
    ...
    # und return
    blr

ich bekomme die Fehlermeldung beim compilieren/assemblieren:
 " unsupported relocation against fcn1"
Hat Jemand eine Idee wie man das lösen kann? Ich möchte den instruction 
"bcctrl" damit ich mit dem Count Reigister branchen kann und nicht 
relative branch mit dem "bl"

Danke

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat also keiner n Ahnung wie das funktioniert?

Autor: Karl M. (movex)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
.equ FUNC_ADDR  0x10000


# jump address is in r3
lis  r3,FUNC_ADDR@h
ori  r3,r3,FUNC_ADDR@l
# save into counter reg
mtctr r3
# jump into given address
bctrl

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
super danke.
was bedeuten dann die @h und @l in FUNC_ADDR@h und FUNC_ADDR@l.

besten dank

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok is klar ;)
high und low.

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
warrun macht man eigentlich die teilung (high/low)?
gibts in ppc kein Befehl um eine 32bit konstante in Register zu laden?

sowie hier z.B. (die gibt aber eine compiler fehler "unsupported 
relocation against FUNC_ADDR")

.equ FUNC_ADDR  0x10000
lis  r3,FUNC_ADDR


Danke

Autor: Karl M. (movex)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei einer 32 Bit Inbstruktion kann man keine 32 Bit immediate Data 
laden.
Es gehen ja einige Bits für opcode und Operanden Register drauf.
Daher ist ein load immediate ein 16 bit half word.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.