Forum: Mikrocontroller und Digitale Elektronik Grösser oder gleich 10'000


von Izoards (Gast)


Lesenswert?

HI

Wie kann ich eine grösser oder gleich Abfrage am einfachsten 
realisieren? Ich muss eine Abfrage haben, die ein 16- Bit Register 
überprüft, ob es grösser oder gleich 10'000 ist!!! Wie kann ich ein 16- 
Bit Register vergleichen???

thanks IZU

von Jonas Diemer (Gast)


Lesenswert?

so wie's aussieht gibt's da keine funktion für...

ich würd (vielleicht) einfach 10000 von den registern abziehen.

also seien die regs wieder Xh und XL.

10'000=0x2710

dann ziehste 0x27 von XH ab, und dann 0x10+Carry von XL. dann checkst du 
das Zero-Flag. Wenn das gesetzt ist, war die zahl in XH:XL gleich 
10'000. Wenn das carry flag gesetzt ist (dann ist XL untergelaufen), war 
die zahl größer.

vielleicht geht's einfacher, wenn also jemand ne idee hat, würd mich 
auch interessieren.

Gute n8

von Jonas Diemer (Gast)


Lesenswert?

>Wenn das carry flag gesetzt ist (dann ist XL untergelaufen), war die zahl größer.

es muss natürlich heißen:

Wenn das carry flag gesetzt ist (dann ist XL untergelaufen), war die 
zahl kleiner, wenn beide flags (Z und C) nicht gesetzt sind, war die 
zahl größer als 10'000.

von Steffen (Gast)


Lesenswert?

Das funzt ähnlich der Subtraktion/Addition

LDI  DL, 0x50
LDI  DH, 0xC3
CP   DL, CL  <--------
CPC DH, CH <--------
BRLO  overflow

(CL,CH,DL,DH sind R20-23)

von Steffen (Gast)


Lesenswert?

Sorry, du musst 0x50 und 0xC3 entsprechend ändern!

von Jonas Diemer (Gast)


Lesenswert?

ahh... sehr sehr gut! :-)

von Izoards (Gast)


Lesenswert?

Vielen Dank für die Antwort!!!!

Jedoch funzt es bei mir immer noch nicht, ist es nicht so, dass der BRLO 
Befehl springt, wenn das Carry Bit gesetzt ist???
Das Carry Bit wird also nur abhängig vom High Byte gesetzt!!! Darum 
erkennt diese Abfrage diese 10'000 nicht!!!!

Oder sehe ich das falsch???

Vielen Dank!

Izoard

von Jonas Diemer (Gast)


Lesenswert?

doch, also eigentlich müsste es klappen...

das carry bit wird ggf von cp gesetzt, und dann von cpc ggf nochmals.

von Izoards (Gast)


Lesenswert?

jetzt habe ich es gesehen, das mit dem Carry Bit klappt, doch wenn die 
zahl genau gleich gross ist, springt er nicht!!!

von Jonas Diemer (Gast)


Lesenswert?

brlo springt, wenn die eine zahl kleiner ist als die andere.

nimm stattdessen brsh (oder?).

von Izoards (Gast)


Lesenswert?

ich habe nun den Vergleichs- Wert um eins verkleinert, nun spring er 
auch, wenn es gleich ist....

Noch eine Frage:

Wenn ich nun das ganze mit 100 machen möchte,
könnte ich doch mit dem CPI XL, 0x64 vergleichen und dann mit BRSH 
springen???? Wieso geht das bei mir nicht???

Funktioniert CPI mit XL nicht???'

IZo

von Jonas Diemer (Gast)


Lesenswert?

doch, das sollte gehen.

von Uwe (Gast)


Lesenswert?

Hi,
Ich frage bei >= immer nur das C-Flag ab. Bei <= dreht man eben die 
Abfrage um. (cp r1,r2 ; cp r2,r1)

a<b,C=1
a=b,C=0
a>b,C=0

Gruß Uwe

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.