Forum: Mikrocontroller und Digitale Elektronik Vergleich in Assembler


von Frank (Gast)


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

von André K. (andre-)


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

von Frank (Gast)


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

von André K. (andre-)


Lesenswert?

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

Versuchs mal so.

MfG

von André K. (andre-)


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:

von Andi K. (Gast)


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

von Frank (Gast)


Lesenswert?

Danke
jetzt geht es!!!!
MFG
Frank

von Bolle (Gast)


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.

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.