mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Vergleich in Assembler


Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Kann mir jemand sagen, wie man ein Vergleich in ASM macht?
Ich will ein Variable inc. Wenn sie z.B. eins ist springe, wenn sie
zwei ist springe doch wenn sie ungleich 0 1 2 oder 3 ist dann setzte
Variable auf 0 zurück. Ich hatte es mit
cpi zustand, 4
breq reset
das haut aber nicht hin.
In Basic ging das: if zustand > 3 then reset


Vielen Dank für eure Hilfe
Frank

Autor: André K. (andre-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"if zustand > 3 then reset"
Wenn du das so schreibst, laesst das irgendwie vermuten, dass reset
eine deklarierte Sub ist. Da Breq aber eher einem normalen Sprungbefehl
(Goto) gleichkommt, koennte das wegen des ret am Ende der Sub irgendwas
im Stack vemurksen.

MfG

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ja, es ist eine SUB. Ich inc die Var. mit einem Drehgeber. Ich will nur
Bit 1 und 2 und 3 haben. Wenn Zustand eine andere grösse annimmt,
dann soll er zu reset springen und Zustand wieder auf Null setzen.
Das das ganze von vorn begint. Soll eine Menüsteuerung werden.
Frank

Autor: André K. (andre-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
cpi zustand, 4
brsh reset1 'huepfen, wenn groesser oder gleich 4
.
.'restlicher code
.
.
.
jmp ende
!reset1:
rcall reset
!ende:

Versuchs mal so.

MfG

Autor: André K. (andre-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wobei die Sub nicht unbedingt noetig ist, wenn dort nur die Variable
wieder 0 gesetzt wird. Also:

cpi zustand, 4
brsh reset1 'huepfen, wenn groesser oder gleich 4
.
.'restlicher code
.
.
.
jmp ende
!reset1:
clr zustand
!ende:

Autor: Andi K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Wenn "Zustand" niemals höhere Werte als 4 annehmen kann, dann geht
das auch so:

 cpi zustand, 4 ;Ist zustand > 3?
 brne NoReset   ;Wenn nicht, dann Wert belassen.
 clr Zustand    ;zustand löschen, ist das selbe wie "ldi zustand,0".
NoReset:

Wenn es aber auch mal durch Zufall Werte größer 4 haben sollte, kann
man auch mit kleiner als, lower, brlo, vergleichen bzw. springen:

 cpi zustand, 4 ;Ist zustand < 4?
 brlo NoReset   ;Wenn ja, dann Wert belassen.
 clr Zustand    ;zustand löschen, ist das selbe wie "ldi zustand,0".
NoReset:

MfG
Andi

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke
jetzt geht es!!!!
MFG
Frank

Autor: Bolle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
clr Zustand    ;zustand löschen, ist das selbe wie "ldi zustand,0".

Dasselbe nur in dem Sinn, daß sowohl nach "clr a" als auch nach "ldi
a, 0" das Register a den Wert Null hat.  Es gibt jedoch einen
Unterschied zwischen diesen beiden Null-Setz-Varianten, der durchaus
bedeutsam sein kann: clr beeinflußt das S-, V-, N- und Z-Flag (S=0,
V=0, N=0, Z=1), wohingegen ldi keine Wirkung auf die Flags hat.

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.