Vergleich in Assembler

Gast #215250
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
#215251
"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
Gast #215252
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
#215254
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:
Gast #215255
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
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

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.