8051 Zwei 16-Bit-Werte testen ob größer/kleiner/gleich

OP #4993833
Lesenswert?

Hallo!

Ich müsste für ein Speicher-Kopier-Programm (auf dem 8051er) testen ob 
zwei eingegebene 16-Bit-Adressen (Wörter) im gültigen Bereich sind. Das 
zweite Wort darf nicht kleiner oder gleich dem ersten Wort sein - später 
muss geprüft werden ob das zweite Wort mehr als 32kB weit weg ist vom 
ersten Wort.

Aber erstmal muss das zweite Wort größer sein als das erste Wort.

Adresse 38h/39h sind das erste Wort (H/L).
Adresse 3Ah/3Bh sind das zweite Wort (H/L).



Subtrahieren kann ich schonmal mit:

MOV A,3Bh
CLR C
SUBB A,39h
MOV R5,A
MOV A,3Ah
SUBB A,38h
MOV R4,A

Das Ergebnis von Wort 2 minus Wort 1 steht dann in R4/R5 (H/L).



Weiss jemand wie man effizient zwei Wörter auf größer als prüfen kann ?
OP #4993901
Lesenswert?

A. K. schrieb:
> H-G S. schrieb:
>> Das Ergebnis von Wort 2 minus Wort 1 steht dann in R4/R5 (H/L).
>
> Und der </>= Status steht im C-Flag.

Heisst dass das nach der Subtraktion der Highbytes noch ein Carry-Flag 
zur Auswertung bereitsteht ? Das eventuelle Carry-Borrow von der 
Lowbyte-Subtraktion wurde ja verbraucht ...

Georg G. schrieb:
> Für den MCS51 bietet sich die kostenlose Version von Keil an.

Ist da ein 8051-Simulator dabei ?

Heinz V. schrieb:
> Erstmal beide HighBytes vergleichen, wenn davon eins grösser ist der
> Vergleich eindeutig und die LowBytes uninteressant, wenn die HighBytes
> gleich, dann die LowBytes prüfen, so würde ich das machen.

Das klingt gut ...
#4993909
Lesenswert?

H-G S. schrieb:
> Heisst dass das nach der Subtraktion der Highbytes noch ein Carry-Flag
> zur Auswertung bereitsteht ?

Ja. Kannst es auch Borrow nennen. Je nach Architektur und damit der 
Arbeitsweise des Flags bei der Subtraktion steht ein gesetztes C für >= 
oder < der Gesamtoperation.

Hintergrund: Dass nach einer einzelnen Subtraktion das Carry/Borrow Flag 
für </>= steht, ist vielleicht bekannt. Wenn du diese Subtraktion auf 
Bitebene betrachtest, dann ist es dafür völlig egal, ob du alle Bits in 
einem Rutsch rechnest oder jedes einzeln.

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