Forum: Mikrocontroller und Digitale Elektronik Assembler Adresse erste Befehle


von Fer T. (fer_t)


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.

von Max D. (max_d)


Lesenswert?

Das klingt nach einem Hammer-Nagel Problem.
Erzähl vlt. erstmal was du dir erhoffst aus dem wilden Rumgespringe

von Fpgakuechle K. (Gast)


Lesenswert?

Check mal im Datenblatt "Deines" AVR die Abschnitte zu Bootloader
und Fusebits und reset vector .
MfG,

von OldMan (Gast)


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.

von Fpgakuechle K. (Gast)


Lesenswert?

Lt. 
http://www.atmel.com/images/atmel-2513-8-bit-avr-microntroller-atmega162_datasheet.pdf

ist beim atmege 162 der erste flash nach der RESET/IRQ-Tabelle 0x38 
(s.59).

MfG,

von Peter D. (peda)


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.

von Karl H. (kbuchegg)


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.

von oldmax (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.