ASM--->MaschinenCode Wieso aus rjmp .+6 -> 03c0 wird?

OP #495549
Lesenswert?
• ▲
▼
Verstehe die Darstellung von: "rjmp .+6" im Flash nicht?

Aus einer .lss-Datei:

78:  03 c0         rjmp  .+6        ; 0x80 <adc_getvalue+0x12>



D.h. also, die Darstellung von rjmp .+6 ergibt 03c0 im Prog.-Speicher.

Die Beschreibung im Instruction-Set von rjmp lautet:
rjmp k
16-Bit OP-Code: 1100 kkkk kkkk kkkk

0b1100=0xC    Hex C entspricht also rjmp.

Das C ist in 03c0 nicht an erster Stelle, sollte es aber lt. OP-Code 
sein.
Okay, kann ich ja, (warum auch immer) die Bytes tauschen, habe ich:
C003
Mein Problem ist, wo ist die 6?
Das  ".+6" soll heißen 6 im Zweierkomplement? (Oder wozu der Punkt?) - 
Ist ja positiv also ändert sich die zahl zu einer vorzeichenlosen nicht. 
Also würde ich C006 (ohne Drehung im Maschinen-Code) erwarten...

Was mach ich falsch?
Gast #495580
Lesenswert?
• ▲
▼
Zu beachten ist auch noch, dass beim Assembler der . bedeutet: die 
Adresse des aktuelle (RJMP)-Befehls, wogegen der Prozessor die Bytes vom 
nächsten Befehl aus zählt.

Das erklärt zwar den Unterschied zwischen 3 und 6 noch nicht ganz, aber 
sollte Dir troztden weiterhelfen, mit den obengenannten Posts den Code 
zu verstehen.

Ist der Code Ergebnis eines Compilers? Wenn ja, dann kann es auch sein, 
dass der Compiler bei einem bedingten Sprung die Bedingung umkehrt und 
andere Sprünge verwendet.

z.B.
brne label1
rjmp label2

wird zu
breq label2
rjmp label1

Wie schauen denn die umliegenden Befehle (und der Sourcecode) aus?
#495584
Lesenswert?
• ▲
▼
Hi!
> ich weis es zwar auch gerade nicht genau, aber der speicher für
> intruktionen ist im AVR wordweise organisiert, so werden aus 6 Byte 3
> Words. Kann aber auch sein das es falsch ist

Nö, stimmt exakt.

Wenn Du Dich noch weiter für AVR assembler interessierst, dann kannst ja 
den von Jonas Diemer geschriebenen (und von mir partiell erweiterten) 
AVR simulator ansehen: http://sourceforge.net/projects/avrsimu/

Ist ein reines commandline tool (und dzt nur für ATtinys), aber im Code 
kann man viele Infos rauslesen.

LieGrü,
strub

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.