CarryBit - Wie und was

Gast #2434436
Lesenswert?

HI

>Wenn das Ergebnis einer Addition größer als der Wertebereich ist, dann
>wird das Carry-Bit gesetzt.

Bei einer Subtraktion auch.

Auch für die 8051 sollte es eine Befehlsübersicht geben in der steht, 
welche Befehle das Carry-Flag beinflussen und welche das Flag benutzen.

MfG Spess
Gast #2434457
Lesenswert?

Hi

>...und wie kann man es beschreiben?

CLR C          Lösche das Carry-Flag
SETB C          Setze das Carry-Flag
CPL C          Invertiere den Inhalt des C-Flag
ANL C,badr     Das Carry-Flag wird überschrieben durch das Ergebnis der
               UND-Verknüpfung von Carry-Bit und dem invertierten Inhalt
               von badr.
ORL C,badr     Das Carry-Flag wird überschrieben durch das Ergebnis der
               ODER-Verknüpfung von Carry-Bit und dem Inhalt von badr.
ORL C,badr     Das Carry-Flag wird überschrieben durch das Ergebnis der
               ODER-Verknüpfung von Carry-Bit und dem invertierten 
Inhalt
               von badr.
MOV C,badr     Lade in das Carry-Bit den Inhalt von badr.

MfG Spess
Gast #2434484
Lesenswert?

Wenn ich mich recht erinnere, wird das Carry-Bit auch für andere 
Operationen verwendet.
Man kann es auch bei einem Shift als Eingangsvariable eines 
Schieberegisters verwenden. Dann kann man eine "Variable" mit einem Wert 
aus einer logischen Operation füllen und das dann auch noch in einer 
Schleife.

Kann aber auch sein, dass mein 8051-Assembler-Wissen inzwischen fürn 
Popo ist...
Gast #2434487
Lesenswert?

Hi

>Ich frage mich nur wann man das in der Praxis braucht.
>Z.B. MOV C,badr

>wann und wie kann man das brauchen?

Das habe ich in 5sec durch Gurgel gefunden. Du solltest deine 
Such-Kompetenz verbessern.

MfG Spess
Gast #2434556
Lesenswert?

Danke Peter,

der Link ist super!.


Hier habe ich mir noch ein Beispiel für das CarryBit bei Sprungbefehlen 
gebastelt:

mov p2, #0
start:
mov a, p1

cjne a,#128, ende
mov p2, #3
setb p2.0

ende:
jmp start;
end

Jetzt habe ich das gegessen.
Danke an alle für die Hilfe!
Gruß
Peter
Gast #2434603
Lesenswert?

Tschuldigung.

Ich hab das so gesehen, das wenn die Bedingung bei cjne erfüllt ist, 
also der wert bei 128 liegt, wird das carry bit gesetzt und er springt 
nicht direkt zur marke ende. Ist der Wert nicht 128 ist auch das carry 
bit nicht gesetzt.
Vielleicht ist es auch nicht das carrybit das hier gesetzt wird, sondern 
irgend was anders. Werde mir morgen mal die Seite 1 reinziehen.

Gruß
Peter.
Gast #2434609
Lesenswert?

ja, da gibts noch mehr status-bits, im Fall von cjne ist es das zero-bit 
(es wird eine Subtraktion ausgeführt, die flags entsprechend des 
Ergebnisses gesetzt, das eigentliche Ergebnis wird aber nicht in den 
Akku zurückgeschrieben.
#2434900
Lesenswert?

crazy horse schrieb:
> im Fall von cjne ist es das zero-bit

Nein, das Z-Bit ist eigentlich garkein richtiges Bit. Es ist direkt das 
NOR aus allen Bits des ACC.


Peter Steiner schrieb:
> Hier habe ich mir noch ein Beispiel für das CarryBit bei Sprungbefehlen
> gebastelt:

Nö. Du wertest C nirgends aus.

Das CJNE springt bei Ungleichheit.
Danach kann man dann noch C testen, ob größer oder kleiner.


Peter
#2434921
Lesenswert?

Peter Steiner schrieb:
> Tschuldigung.
>
> Ich hab das so gesehen, das wenn die Bedingung bei cjne erfüllt ist,
> also der wert bei 128 liegt, wird das carry bit gesetzt und er springt
> nicht direkt zur marke ende. Ist der Wert nicht 128 ist auch das carry
> bit nicht gesetzt.

Das zeigt eigentlich, dass du das Carry Bit nicht verstanden hast.

Kannst du dich noch erinnern, als du in der Grundschule Addieren gelernt 
hast? Du hast das wahrscheinlich so gelernt wie ich auch:

Man schreibt die Zahlen untereinander und lässt noch ein wenig Platz ehe 
man dann den Strich macht

    457
    784

   -----

und dann rechnet man:
4 plus 7 macht 11, 1 hingeschrieben, 1 weiter

    457
    784
     1
   -----
      1

1 plus 8 macht 9, plus 5 macht 14. 4 hingeschrieben, 1 weiter

    457
    784
    11
   -----
     41

1 und 7 macht 8, plus 4 macht 12. 2 hingeschrieben, 1 weiter

    457
    784
   111
   -----
   1241

In einer Welt, in der nur 3 stellige Zahlen möglich sind, ist dieses 
letzte '1 weiter' der Carry, der Übertrag in die nächst höhere Stelle, 
den du im Ergebnis nicht mehr berücksichtigen kannst, weil deine 
Stellenanzahl limitiert ist. Das Ergebnis istr dann 241 und du hast 
einen Carry (nicht berücksichtigten Übertrag) von 1.
Und da bei einer binären Addition dieser Übertrag nur 0 oder 1 sein 
kann, reicht dann eben ein einzelnes Bit aus, um diesen Carry zu 
speichern.
Beitrag #6055010 wurde von einem Moderator gelöscht.

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