Hey Leute, Ich arbeite mich gerade mithilfe eines Skriptes (von meinem Prof) sowie eines Buches (Mikroprozessortechnik von Klaus Wüst) in die Mikroprozessortechnik ein. Jedoch sind beim Lösen der Aufgaben, aus dem Buch, einige Fragen aufgekommen. Fragestellung aus dem Buch: Welche Flags (Carry oder Overflow) werden bei 8-Bit Verarbeitung gesetzt, wenn folgende Rechnungen durchgeführt werden. a) 90d + 200d (Addition) b) 90d + 40d (Addition) c) 90d - 110d (Subtraktion) d) -90d - 60d (Subtraktion) Das Overflow Flag zu bestimmen, machte mir mit folgendem Hilfsatz (Aus dem Skript von meinem Prof) keinerlei Probleme. Hilfsatz: Bei 8-Bit Operationen wird das Overflow Flag gesetzt, wenn: - Ein Übertrag von Bit 6 nacht Bit 7 und kein Übertrag ins Bit 8 - Ein Übertrag nach Bit 8 und kein Übertrag von Bit 6 nach Bit 7 stattfindet Meine Lösung: a) Overflow = 0 b) Overflow = 1 c) Overflow = 0 d) Overflow = 1 Nun zum Carry Flag: Bei der Addition habe ich ebenfalls keine Probleme, denn im Buch steht: Das Carry Flag zeigt bei der Addition einen Übertrag aus dem MSB heraus auf das (nicht mehr vorhandene) nächst höherwertige Bit an. a) Carry = 1 b) Carry = 0 Nun zu meinem Problem bei der Subtraktion: Im Buch steht: Bei der Subtraktion zeigt es einen Borgen (Ich konnte nirgends herausfinden, was ein Borgen ist) von dem nächst höherwertigen Bit auf das MSB an. Dies wird beim Umgang mit vorzeichenlosen Zahlen ausgenutzt. c) Keine Ahnung d) Ebenfalls keine Ahnung Jetzt habe ich gelesen, dass bei einer Subtraktion a-b auch ein Carry-Flag gesetzt wird - und zwar dann, wenn der Subtrahend größer als der Minuend ist (also b>a). Wenn das stimmt, würde dies die Aufgabe c) lösen, aber ich wäre immer noch bei der d) Planlos. Was ich mich ebenfalls Frage, ob der Wertebereich etwas mit dem Carry bzw. Overflow Flag zu tun hat? Positiven Zahlen: 0…255 Negative Zahlen: -128…+127 Ich hoffe ihr könnt mir helfen und mir sagen ob ich ansonsten mit meinem Vorgehen richtig bin. Grüße Brian!
:
Bearbeitet durch User
Brian Nikki schrieb: > Ich konnte nirgends herausfinden, was ein Borgen ist Ne, oder? "Borgen" ist ein deutsches Wort. Bedeutet dasselbe wie "Ausleihen".
Okay, kannst du sonst noch etwas dazu sagen? Löst mein Problem mit der Subtraktion nämlich nicht.
Schriftliches Subtrahieren: 16 - 9 ==== Wenn Du die Einerstellen abziehst, musst Du Dir 1 von der Zehnerstelle "borgen". Okay, das Ergebnis ist hier positiv, also für Deinen Problemfall nicht wirklich relevant. Aber dasselbe mit dem "Borgen" gilt auch hier: 6 - 9 ==== Verstanden?
Und genau dann, wird das Carry Flag gesetzt? Ü=Übertrag c) 90 01011010 -110 10010010 ______________ Ü 00100100 ______________ -20 11101100 Warum wird hier das Carry Flag gesetzt? d) -90 10100110 -60 11000100 _______________ Ü 100001000 _______________ -150 101101010 Warum wird hier das Carry Flag NICHT gesetzt? Danke für eure Hilfe. Grüße Brian
:
Bearbeitet durch User
Bei den meisten Prozessoren kannst du folgendermaßen vorgehen: Betrachte bei der Subtraktion a-b die Operanden a und b als vozeichenlose Zahlen. Ist dann b>a, wird das Carry-Flag gesetzt, sonst nicht. Bei 90-110 ist a=90, b=110 und damit b>a und C=1. Bei -90-60 ist a negativ. Bei 8-Bit-Zweierkomplementdarstellung entspricht -90 der vorzeichenlosen Zahl 256-90=166. Also ist a=166, b=60 und damit b≤a und C=0. Aber Vorsicht: Bei einigen Prozessoren (bspw. dem 6502 und m.W. auch bei den PICs) wird das Carry-Flag bei der Subtraktion genau andersherum gesetzt als bspw. beim AVR, nämlich bei b≤a, d.h. wenn kein Borgen erforderlich ist.
Das ist z.T. sehr Prozessorspezifisch. Schau Dir mal die (Atmel-) Befehle: ADD und ADC, sowie ihre Gegenstücke SUB und SBC, an. Da ist genau beschrieben, ob und wann die Übertrag- und Überlauf-Flags gesetzt werden. Eine Liste ist unter: http://www.atmel.com/Images/doc0856.pdf zu finden.
Yalu X. schrieb: > Aber Vorsicht: Bei einigen Prozessoren (bspw. dem 6502 und m.W. auch bei > den PICs) wird das Carry-Flag bei der Subtraktion genau andersherum > gesetzt Die Logik dahinter: Genau das kommt raus, wenn man nicht wirklich subtrahiert, sondern ohne zusätzliche Massnahmen einfach nur das Komplement addiert. "Borgen" ist eine grausame Übersetzung von "borrow", wie der Übertrag bei einer Subtraktion in Englisch öfter mal genannt wird. Grammatikalisch korrekt wäre wohl "Geborgtes", aber das versteht auch niemand. Die Unterscheidung hat aber einen tieferen Sinn: Wenn im Kontext einer Subtraktion von einem "borrow" gesprochen wird, dann ist eindeutig die echte Subtraktion gemeint, nicht die Addition des Komplements. Der Umkehrschluss funktioniert leider nicht, d.h. der Begriff "carry" wird für beide Varianten verwendet.
:
Bearbeitet durch User
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.