Forum: Mikrocontroller und Digitale Elektronik Register vergleichen


von Maxim (Gast)


Lesenswert?

Benutzen den 8252 von Atmel.

Ich kann zwar zwei Werte vergleichen und springen, falls sie ungleich 
sind.

Aber wie kann ich springen, wenn ein Wert kleiner oder größer als ein 
anderer ist?

von Maxim (Gast)


Lesenswert?

Ich habe eine Idee:

Man hat zwei Werte in R0 und R1 und will wissen, ob der Wert in R1 
größer als der in R0 ist. Dazu kopiert man den Wert aus R1 in den ACCU 
und schaut, ob er 0 ist. Wenn der Wert im ACCU 0 ist, kann R1 nicht 
größer R0 sein. Ist der Wert aber nicht 0 und auch ungleich R0, dann 
erniedrigt man ihn um 1 und vergleicht ihn wieder mit R0. Ist er nun 
gleich R0, so ist R1 größer R0. Wenn nicht, fährt man weiter fort, bis 
der Wert im ACCU 0 erreicht hat. Wenn bis zu diesem Zeitpunkt keine 
Übereinstimmung mit R0 gefunden wurde, ist R1 größer R0.

Hoffe, der Algorithmus ist ok. Ich kann mir keinen einfacheren 
vorstellen. Aber ich lasse mich gerne überraschen.

Der Nachteil ist der Rechenaufwand. Im schlimmsten Fall muss der 
Algorithmus mehr als 250 Mal durchlaufen. Das ist eine Verschwendung.

von Mike R. (thesealion)


Lesenswert?

Ich würde das ganz einfach per subtraktion prüfen.
So ziemlich jeder Controller hat ein Statusregister, in dem
ein Vorzeichenwechsel gespeichert wird.

a - b rechnen, wenn negatives Vorzeichen, war b größer, bei positivem
war es a oder beide sind gleich (wobei das z.T. vom Controller abhängt).

von Maxim (Gast)


Lesenswert?

Ja, das war eine Überraschung. :-)

von fnah (Gast)


Lesenswert?

hast du im unterricht nicht aufgepasst, oder warum kannst du deine 
hausaufgaben nicht alleine loesen?

von Maxim (Gast)


Lesenswert?

Im Unterricht haben wir sowas (noch) nicht durchgenommen und deshalb 
können es auch nicht die Hausaufgaben sein. Und warum bist du immer so 
ein Pessimist?

von fnah (Gast)


Lesenswert?

>Und warum bist du immer so ein Pessimist?
bedingte spruenge sind nunmal absolute grundlagen, stehen in jedem 
asm-tutorial und sollten mit die ersten sachen sein, die man 
lernt/beigebracht bekommt.
und da du dich hier im forum schon als schueler geoutet hast und wegen 
jeder grundlegenden kleinigkeit einen thread eroeffnest anstatt google 
zu benutzen oder tutorials zu lesen, lag es nahe anzunehmen, dass du ein 
fauler schueler bist, der seine hausaufgaben vom forum machen lassen 
will.

ok, scheinbar ist das nicht so. schande ueber mich.

von Maxim (Gast)


Lesenswert?

Hm, faule Schüler machen die Hausaufgaben GAR nicht. Wie auch immer, ich 
stelle Fragen im Forum, weil ich gerne über solche Dinge diskutiere. Des 
Weiteren benutze ich sehr wohl Google und lese Datenblätter und 
Tutorials. Würde ich das nicht tun, wäre das Forum noch viel voller. ;-)

von Peter D. (peda)


Lesenswert?

Du kannst SUBB oder CJNE nehmen und dann das Carry-Bit zum Springen 
benutzen. Bei SUBB aufpassen, vorher CLR C machen.


Peter

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.