"JMP Tabelle"

Gast #20024
Hallo,

im Register r16 steht bei mir ein Command der nun Ausgeführt werden soll 
(r16 wurde von der ser. Schnittstelle eingelesen).
Nun möchte ich jenach inhalt von r16 zu den Befehlen springen. Ich 
dachte mir das in etwa so.


main:
  [..]
  jmp 0x0100+(r16*2)  (Hier haperts!)

.org 0x0100 ; Befehlstabelle
  rjmp Befehl1
  rjmp Befehl2
  [..]
  rjmp Befehl31

Befehl1:
  dosometing
  rjmp main

Befehl2:
  dosomethingelse
  rjmp main

[..]

Befehl 31:
  nochetwastun
  rjmp main


Nur wie springe ich in der Zeile jmp 0x0100+(r16*2) am besten? Oder ist 
der Ansatz ganz falsch?

Grüße
  Tobias
Gast #20026
Der Ansatz dann aber 2xr16 zu 0x0100 dazuzuzählen stimmt, aber? Oder 
einfach nur noch daführ sorgen das das Ergebnis in r30,r31 steht und 
dann ijmp?
Gast #20027
Der Ansatz ist im Prinzip richtig, nur es muss R16 im Gegensatz zum 
Tabellenzugriff nicht mit 2 multipliziert werden. Dies gilt nur, wenn 
die Tabelle aus RJMP Befehlen besteht. Hier also mal der Code als 
Denkanstoss.

ldi   R30,low(JMP_TABLE)
ldi   R31,high(JMP_TABLE)
add   R30,R16
brcc  PC + 2
inc   R31
ijmp

JMP_TABLE:
      rjmp  BEFEHL1
      rjmp  BEFEHL2
      rjmp  BEFEHL3
      ....

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.