Inline Assembler

Gast #432826
Lesenswert?

asm volatile ("ldi R30,low(Sprungtabelle)"::);
asm volatile ("ldi R31,high(Sprungtabelle)"::);

Fehlermelung: C:\...\ccQVaaaa.s:1673: Error: garbage at end of line

ich habe dies alles in Assembler programmiert und compaliert, da 
funktioniert das ohne Probleme, jetzt wollt ich den Code in C 
transportieren und dann krieg ich diese Fehlermeldung... Was mach ich 
falsch?

kann ich aus C auf ne Assemlberfunktion zugreifen?!
Gast #432838
Lesenswert?

Hallo

Garbage at end of line heisst es so praktisch immer, wenn einfach etwas 
nicht funktioniert.

Konkret vermute ich mal, dass deine Funktionen low(...) und high(...) 
nicht funktionieren. Versuche es mal mit lo8(...) und hi8(...).

Gruss

Michael
Gast #432851
Lesenswert?

Hallo, zu früh gefreut...
ich wollte den Zeiger Z R30 (low) R31 (high)
auf das Label Sprungtabelle zeigen lassen, wenn ich
asm volatile ("ldi R30,lo8(Sprungtabelle)"::);
asm volatile ("ldi R31,hi8(Sprungtabelle)"::);

ausführe, dann zeigt der Pointer irgendwo hin, aber nicht auf die 
Sprungtabelle :-(

ich hab das mit
ldi R30,low(Sprungtabelle)
ldi R31,high(Sprungtabelle)

in Assembler probiert und da funktioniert die Zuweisung

hat wer noch ein tipp für mich?
Gast #432859
Lesenswert?

Wo genau ist denn "irgendwo"? Wenn da ein Faktor 2 falsch ist, dann ist 
das wieder die alte Geschichte, daß die Adresse in 16-Bit-Worten 
angegeben wurde, im Z-Register aber in Bytes stehen muß. Könnte es das 
sein?
Gast #432863
Lesenswert?

@ Mciahel Wilhelm: der Assembler-Code sind etwa 600 Zeilen, aber diese 
beiden Funktionieren nicht
@ Philipp:
also er sollte auf 0x057A zeigen
aber zeigt auf 0x0AF4

da ist der Faktor 2 dazwischen...

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