Assembler Adresse erste Befehle

OP #4160967
Lesenswert?
• ▲
▼
Guten Abend zusammen,

Ich stehe momentan vor dieser Frage: An welcher Stelle kommen die ersten 
eigenen Befehle?
Ich habe mir ein paar disassemblierte Programme angeguckt und komme zu 
diesem Schluss: bis 25 kommen die Sprungadresse für Interrupts.
Danach kommt der std. handler wenn keine definiert wurden und ab 38 dann 
die eigenen Funktionen.

Ich frage mich das da ich im Code an stellen springen will für welche 
ich im Code selber nicht weiß welches Sprunglabel ich braucht, z.b. so 
was:

(irgendwas in eax, am einfachsten z.b.: Movl $0x40, %eax)
jmp *%eax

Wenn das nicht geht muss ich mir was anderes überlegen...

Vielen Dank!

Edit: Handelt sich um AVRs.
Gast #4160977
Lesenswert?
• ▲
▼
Du solltest in Ruhe das Datenblatt von dem AVR lesen den Du benutzen 
möchtest. Ausserdem wäre es für Dich ratsam, dass Du dich erst einmal 
grundsätzlich mit der Assemblerprogrammierung vertraut machst.
Disassemblierter Code bringt Dich nicht weiter.

Bei Atmel gibt es jede Menge Doku zu dem Thema. Entsprechende Bücher 
findet man auch.

Hier wird mit Dir wohl niemand einen Kurs in Assembler machen.
#4161241
Lesenswert?
• ▲
▼
Fer T. schrieb:
> Ich stehe momentan vor dieser Frage: An welcher Stelle kommen die ersten
> eigenen Befehle?

Das steht Dir völlig frei.
Allerdings sollte man die Vektortabelle reservieren, falls man 
Interrupts benutzen will.

Fer T. schrieb:
> bis 25 kommen die Sprungadresse für Interrupts.

Es mag MCs geben, wo das stimmt, aber es gilt nicht für alle.

Fer T. schrieb:
> Danach kommt der std. handler

Der darf auch überall stehen oder ganz entfallen. In Assembler habe ich 
ihn entfallen lassen, da unnötig. Benutzte Interrupts haben ihren 
Handler, unbenutzte werden einfach nicht enabled.


Und in C interessiert das alles eh keinen, darum kümmert sich der 
Compiler automatisch und man sollte ihm tunlichst nicht ins Handwerk 
pfuschen, das gibt Ärger.
#4161276
Lesenswert?
• ▲
▼
Fer T. schrieb:

> Ich frage mich das da ich im Code an stellen springen will für welche
> ich im Code selber nicht weiß welches Sprunglabel ich braucht, z.b. so
> was:
>
> (irgendwas in eax, am einfachsten z.b.: Movl $0x40, %eax)
> jmp *%eax
>
> Wenn das nicht geht muss ich mir was anderes überlegen...

Summa Summarum:

Überleg dir was anderes.
Das was da an deiner Beschreibung des Vorhabens so durchsickert, klingt 
alles mehr als abenteuerlich. Das stinkt förmlich nach Pfusch.
Gast #4161504
Lesenswert?
• ▲
▼
Hi
Was du willst, ist vermutlich der IJMP, der über das Z-Register 
adressiert wird. Dazu brauchst du eine Basisadresse, die du in das 
Registerpaar ZL und ZH legst, einen Offset zuaddierst und dann den IJMP 
ausführst. z.B.
1
   LDI   ZL, Low(p(Sprungtabelle)) ; Basisadresse Sprungtabelle
2
   LDI   ZH, Low(p(Sprungtabelle))
3
   LDS   r16, Prg_Nr               ; Variable mit Programmnummer
4
   LSL   r16                       ; mit 2 multiplizieren
5
   ADD   ZL, r16                   ; Ergebnis zur Adresse Addieren
6
   CLR   r16                       ; 
7
   ADC   ZH, r16                   ; Carryflag addieren
8
   IJMP                            ; Sprung zur berechneten Adresse
9

10

11
Sprungtabelle:
12
    RJMP   Prg1
13
    RJMP   Prg2
14
    RJMP   Prg3
15
    RJMP   Prg4
16

17
Prg1:
Ich denke, das meinst du.
Gruß oldmax

Mod: Fixed formatting tags

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.