Vergleich in Assembler

Gast #215250
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
Gast #215252
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
Gast #215255
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
Gast #215257
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren