Was genau ist das CarryBit und wie kann man es beschreiben? Wann wird es in der 8051-Familie benötigt? Gruß und danke Peter
Wenn das Ergebnis einer Addition größer als der Wertebereich ist, dann wird das Carry-Bit gesetzt.
Grob gesagt das 9.Bit des Akkus. Zeigt also einen Überlauf des Wertebereichs an. Wikipedia sollte eine ausführliche Beschreibung liefern :-)
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
Peter Steiner schrieb: > Was genau ist das CarryBit und wie kann man es beschreiben? > > Wann wird es in der 8051-Familie benötigt? Hausaufgaben?
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
Peter Steiner schrieb: > Wann wird es in der 8051-Familie benötigt? Man möchte ja vielleicht auch mit Zahlen >255 rechnen. Peter
Danke für die schnellen Antworten! Hat mich weitergebracht. Ich frage mich nur wann man das in der Praxis braucht. Z.B. MOV C,badr wann und wie kann man das brauchen? Gruß Peter
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...
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
STK500-Besitzer schrieb: > Kann aber auch sein, dass mein 8051-Assembler-Wissen inzwischen fürn > Popo ist... Nee, nee. rlc und rrc mfg.
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
Peter Steiner schrieb: > Jetzt habe ich das gegessen. Gar nichts hast du gegessen, geschweige denn verstanden. Was hat denn das mit dem Carry zu tun? cjne heisst compare jump not equal. So ein Tutorial fängt wie jedes Tutorial auf Seite 1 an. Tu dir selbst den Gefallen und fang' auch da an. mfg.
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.
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.