Gast
#2847252
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?
|
Anzeige
|
PPC assembler befehl für laden von GPR
Gast
#2847252
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? 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 oder doch nur li 5, 0x12345678
Gast
#2847379
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
Gast
#2849517
Hat also keiner n Ahnung wie das funktioniert? .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
Gast
#2858745
super danke. was bedeuten dann die @h und @l in FUNC_ADDR@h und FUNC_ADDR@l. besten dank
Gast
#2858768
ok is klar ;) high und low.
Gast
#2859307
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 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 schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|