mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wohin geht mein Sprung??


Autor: Dennis Iss (tsubasa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe folgenden Programm Code:

  org  0
  ljmp  x1bfd    ; x0000   02 1b fd

        org     1bfd
x1bfd:  mov  r0,#7fh    ; 1bfd   78 7f
  clr  a    ; 1bff   e4
  mov  @r0,a    ; 1c00   f6
  djnz  r0,x????  ; 1c01   d8 fd
  mov  sp,#0a2h  ; 1c03   75 81 a2
  ljmp  x1c44    ; 1c06   02 1c 44

Nun Frage ich mich wohin der "djnz r0,#rel. Adresse" springt.
Ich nehm den PC und addiere den angegebenen Wert "fd" und komme auf 
"1d00".
Aber der Disassember sagt mir der Sprung geht nach "1c00"....

Ich möchte dem Disassembler gerne glauben, aber ich verstehe den Grund 
noch nicht. Entweder fehlt mir nen Denkanstoß oder meine Grippe legt 
mein Hirn momentan noch zu lahm um selber drauf zu kommen.

Wenn er auf "1c00" springt dann würde er ja alle Werte ab 7f abwörts mit 
00 überschreiben. So wie ich das verstehe. Aber dann wären ja auch der 
Startsprung überschrieben und würde beim nächsten Hochfahren nicht mehr 
funktionieren?!

Danke für die schnelle Hilfe...habt mir bisher schon sehr geholfen 
hier..

Autor: Dieter Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Disassembler hat recht, der Sprung geht nach 1c00.
Bei deiner Addition wird fd als positiver Wert 253 verwendet, der 
Disassembler versteht diesen Wert aber korrekt als -3 (2-er Komplement).

Das Löschen des Speicherbereichs betrifft nur das RAM, das gespeicherte 
Programm (im ROM oder Flash) wird davon nicht beeinflusst und 
funktioniert weiter einwandfrei.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
djnz benutzt 2-er Komplement.
fd ist eine negative Zahl!

    fd  =  1111 1101

           0000 0010   alle bits umdrehen
           0000 0011   und 1 addieren

                   3, also entspricht fd dezimal -3

nimm den pc (der schon auf 1c03 steht) und ziehe 3
davon ab, und du landest bei ....

Autor: Dennis Iss (tsubasa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klar...jetzt fällts mir wie Schuppen von den Augen....das 2er 
Komplement...
Ich hab die 1 am Ende nicht addiert und bin deswegen nie auf den Wert 
gekommen...

Ich sollte nicht mit fetter Grippe versuchen Assembler Programme zu 
verstehen...

Danke

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.