Skip if Z is cleared

Gast #680907
Lesenswert?
• ▲
▼
Hallo,

ich würde gerne einen Befehl überspringen, wenn bei der vorigen 
Operation 0 rauskommt. Hier der Codeschnipsel:
1
...
2
cpi  xs, 15        ; vergleiche xs mit 15
3
lds  var3, SREG    ; schreibe SREG in Register var3
4
sbrc  var3, 1      ; überspringe den nächsten Befehl, wenn Z leer ist
5
sbr  var2, 1
6
...
Er überspringt immer den einen Befehl, obwohl xs den Wert 15 hat. Im AVR 
Simulator hab ich dann gesehen, dass er SREG nicht in var3 schreibt. Ist 
das Normal? Wie kann ich das umgehen?

Gruß
Nico
#680921
Lesenswert?
• ▲
▼
Dafür gibts doch extra Befehle. Was soll denn der Quatsch, das SREG in 
ein Rechenregister zu laden und dann zu springen? Mach das mit "brbc Z" 
oder "breq" (der springt dann, wenn Z gesetzt ist) nach dem cpi. Dafür 
sind die Branch-Befehle schließlich da.

EDIT: Da war ich wohl zu langsam...
Gast #680933
Lesenswert?
• ▲
▼
Ach stimmt, das laden muss ja mit "in" gemacht werden und nicht mit 
"lds".
Die Variante mit breq PC-1 gefällt mir ganz gut, nur dass in meinem Fall 
ein breq PC+1 geeignet ist. Ich wollte halt nicht immer ne neue 
Sprungmarke aufschreiben.
Danke für die raschen Antworten!

Gruß
Nico
Gast #680945
Lesenswert?
• ▲
▼
Ich habe es gerade getestet und für die die es interessiert muss es 
folgendermaßen aussehen:
1
cpi  xs, 15
2
brne  PC+2
3
sbr  var2, 1
Ein PC+1 springt nur bis zum nächsten und nicht zum übernächsten Befehl 
und es muss natürlich in meinem Fall ein brne sein. Auf jedenfall 
funktioniert es jetzt so wie es soll :)

Nochmals Danke,

Gruß
Nico

PS: Ich habe nichts gegen Labels, aber wenn ich diese Anweisung 16 mal 
brauche, dann wollte ich nicht jedes mal ein neues Label hinschreiben. 
So ist es kürzer und ich finde es so übersichtlich genug.
#680959
Lesenswert?
• ▲
▼
Nico wrote:

> PS: Ich habe nichts gegen Labels, aber wenn ich diese Anweisung 16 mal
> brauche, dann wollte ich nicht jedes mal ein neues Label hinschreiben.

Wenn ich Programmteile mehr als zweimal brauche, versuche ich sie 
umzuschreiben, z.B. als Schleife oder Tabelle.

Copy&Paste-Monster sind nämlich fehleranfällig, unleserlich, schwer 
wartbar und verbrauchen viel Code.


Peter

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.