Forum: Mikrocontroller und Digitale Elektronik Wieviele Instructions braucht ein bedingter Sprung?


von Dominik B. (theomega)


Lesenswert?

Hallo Leute,
ich muss ein Assembler-Programm möglichst genau timen. Dabei kommt es
darauf an das verschiedene Aktionen haargenau gleich lange dauern. Dazu
müsste ich jetzt wissen wie lange bestimmte Befehle in Assembler
brauchen. Ich habe nun auf avr-asm-tutorial eine Befehlsliste gesehen,
die hat mir sehr geholfen, nur sind noch folgende Fragen offen:
1. Kostet mich eine Sprungmarke (also das definieren, nicht das dorthin
springen) einen Befehl?
2. Wieviel Kostet mich ein Sprung mit brcc? In der Liste steht nur 1/2,
was gilt wann? Ich nehme mal an wenn gesprungen wird, dann 2, sonst 1.
Oder andersherum?
3. Wiso kosten ein rjmp und ein brcc gleich viel? Das heißt ja das das
vergleichen garnichts kostet oder nicht?
4. Nimmt ein NOP immer genau einen Befehl?

Ich danke schonmal
Dominik

von inoffizieller WM-Rahul (Gast)


Lesenswert?

1. nein
2. vermutlich
3. kann man im "Instruction Set" nachlesen. Das gibt es bei Atmel zum
herunterladen.
4. ja

von Läubi (Gast)


Lesenswert?

1) Nein, der Compiler schreibt die Adresse anstelle der sprungmarke,
kostet also nix extra
2) 1 = nicht /  2 = sprung (bin aber nicht 100% sicher ggf einfach mal
simmulieren!)
3) brcc vergleicht nichts... Der Vergleich wird vorher gemacht (cmp ..
add ... sub ... )
4) 1 Taktzyklus

von A.K. (Gast)


Lesenswert?

1. was für einer sollte das sein?
2. ja
3. brcc vergleicht nichts
4. an was denkst du das so? mal macht er aus einem Befehl einen,
manchmal aber auch eindreiviertel?

von mr.chip (Gast)


Lesenswert?

1. Nein. Der Assembler setzt dies dann in eine Zahl um (beim
Sprungbefehl).
2. ...
3. Verglichen wird nicht beim Sprung, sondern bei Operationen oder mit
tst. Das wird dann in Flags gespeichert, auf die sich der Sprungbefehl
bezieht.
4. @a.k.: Ja, der nop-Befehl dümpelt faul ein bisschen vor sich her,
deswegen heisst er ja auch so.

von Ronny (Gast)


Lesenswert?

1.In der Regel schreibt der LINKER die Adressen,der Compiler/Assembler
lässt Symbole drin stehen.Deshalb auch der Linker-Fehler "Undefined
Symbol Referenced in Module xyz".Ob´s beim AVR-Assembler ebenso ist
hab ich jetzt nich nachgeschaut,geh aber mal stark davon aus.

2. Ein Takt die Flags vergleichen,ein weiterer für den Sprung(Adresse
in den PC laden).Wird nicht gesprungen erübrigt sich der letzte Takt.

3.siehe 2.

4.Jeder Befehl nimmt genau einen Befehl.Die Grösse des erzeugten
Opcodes hängt dann vom Befehl ab.Wieviele Taktzyklen dann zur
Ausführung benötigt werden ist wieder eine andere Sache.Die meisten
benötigen beim AVR genau einen Takt.Welche nicht steht im Datenblatt.

Übrigens ist es nicht selbstverständlich,das jeder Takt von der
Haupttaktquelle (also 1 Million Takte pro Sekunde bei 1MHz) auch ein
Maschinenzyklus ergibt.Einige ältere Architekturen benötigen mehrere
Takte für einen Maschinenzyklus.

von Dominik B. (theomega)


Lesenswert?

Danke für die Antworten. Hätte noch eine Frage aus der gleichen
Kategorie: Wie sieht es mit sbis aus? Wann braucht das 1, wann zwei und
wann 3 Befehle? Welche drei Zustände kann der Befehl überhaupt haben,
mir fallen eigentlich nur zwei ein (Pin is 1, Pin is 0).

Danke schonmal
TO

von Entnervter (Gast)


Lesenswert?

Du solltest dir mal bei Atmel das PDF mit "AVR Instruction Set"
runterladen. Da ist jeder Assembler-Befehl nochmal im Detail erklärt.
Da steht das auch mit dabei.

Zum sbis: 1 Taktzyklus, wenn er nicht springt, 2 wenn er springt und
der nächste Befehl ist 1 Wort (16 bit) groß, 3 wenn er springt und der
nächste Befehl ist 2 Worte groß.

von Hannes L. (hannes)


Angehängte Dateien:

Lesenswert?

Genau...

Instruction Set Seite 119

...

von inoffizieller WM-Rahul (Gast)


Lesenswert?

Boaa... Seid ihr alle langsam (und vor allem noch spät auf)! ;)

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.