mikrocontroller.net

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


Autor: Dominik Bruhn (theomega)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: inoffizieller WM-Rahul (Gast)
Datum:

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

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dominik Bruhn (theomega)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Entnervter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß.

Autor: Hannes Lux (hannes)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Genau...

Instruction Set Seite 119

...

Autor: inoffizieller WM-Rahul (Gast)
Datum:

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

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.