Hallo,ich bin mir unsicher bei der Aufgabe die ich als Bild hochgeladen habe. Wäre nett wenn jemand meine Antworten überprüfen könnte. Vielen Dank schonmal. Bei der ersten Addition habe ich für R1 0x1 raus. Dabei werden Carry (C) und Overflow (V) gesetzt. Negative und Zero Flag nicht. Beim 2. habe ich 0x1 raus und dort nur Negative Flag gesetzt. Beim 3. kommt 0x5a raus und kein Flag wird gesetzt. Beim 4. 0x10 und wieder kein Flag gesetzt. Grüße Max
Max M. schrieb: > Beim 2. habe ich 0x1 raus und dort nur Negative Flag gesetzt. 1 ist also negativ? > Beim 4. 0x10 und wieder kein Flag gesetzt. ROR mit SWAP verwechselt?
Genau beim 2. ist die 1 Negativ. Bin mir aber nicht sicher ob unter 0 FF kommt oder ob man die Zahl die raus kommt also 1 Negativ darstellt (mit Flag). ups ja also beim 4. dann 0 und Zero Flag setzen.
Max M. schrieb: > Genau beim 2. ist die 1 Negativ. Bin mir aber nicht sicher ob unter 0 FF > kommt Jetzt wirds wärmer. Bisschen Grundlagen zur Zahlendarstellung büffeln wär aber nicht schlecht, statt bloss an der Oberfläche zu kratzen.
Okay habe nochmal nachgeschaut, also beim 4. wird ja eigentlich garnichts verschoben, das heißt dort müssten nur alle Flags auf 0. Beim 2. wird dann wohl mit 2er Komplement gerechnet. Wenn ich das Binär mache kommt 1111 raus was 0xf entspricht. Negativ Flag muss dann wohl auch gesetzt werden.
Max M. schrieb: > Okay habe nochmal nachgeschaut, also beim 4. wird ja eigentlich > garnichts verschoben, das heißt dort müssten nur alle Flags auf 0. Kleine Hilfe zum Binärsystem: Bei 8 Bits im Register und 4 Flags wirst du nach spätestens 4096 Rateversuchen zum richtigen Ergebnis kommen, wenn du Doppelgänger auslässt. ;-)
:
Bearbeitet durch User
Max M. schrieb: > Beim 2. wird dann wohl mit 2er Komplement gerechnet. Wenn ich das Binär > mache kommt 1111 raus was 0xf entspricht. In 8 Bits gerechnet ist also 13 minus 14 gleich 15?
ROR <Zieloperand>,<Bitanzahl> habe diese Syntax gefunden, die Bitanzahl soll angeben wie oft rotiert wird. Da dort aber keine Anzahl steht müsste es doch 0 sein? Bei 8 Bit kommt nach 2er Komplement 0xFF raus bei 13 - 14. Und im 2er Komplement entsprich das ja -1. Wenn man davon den Betrag berechnet per Einerkomblement + 0b01 bekommt man 1, sprich Betrag ausrechnen. Bin mir aber nach wie vor nicht sicher ob 0x1 + Negativ Flag -1 ergibt oder ob man es im 2er Komplement stehen lassen soll.
Max M. schrieb: > Da dort aber keine Anzahl steht müsste es doch 0 sein? Na dann wäre der Befehl ja maximal sinnlos... Und wenn keine Schiebeanzahl gegeben ist, sollte man wohl eine annehmen, die nicht in einem NOP endet und trotzdem am wenigsten speziell ist (wie zB. 47). Soviele Möglichkeiten gibts da nicht. BTW: Da wo die Aufgabe herkommt, sollte es auch eine Beschreibung der Befehle geben. > Bin mir aber nach wie vor nicht sicher ob 0x1 + Negativ Flag -1 > ergibt oder ob man es im 2er Komplement stehen lassen soll. Denk doch mal dran, dass es nur ein N-Flag gibt, aber deutlich mehr Register. Wäre es dann wirklich sinnvoll, das Vorzeichen (woanders heisst das auch gern Sign) nur im N-Flag zu speichern?
Max M. schrieb: > ROR <Zieloperand>,<Bitanzahl> habe diese Syntax gefunden, die Bitanzahl > soll angeben wie oft rotiert wird. Du solltest die Doku zum betrachteten Prozessor lesen. Nicht die eines anderen Prozessors, der zufällig auch einen ROR Befehl hat. Das könnte nicht nur bei der Shift-Count ins Auge gehen, sondern auch beim Carry-Flag. Das gilt übrigens auch für die Tipps hier. Da du den Prozessor nicht genannt hast, wird vom Leser halt einer angenommen, den er zufällig kennt und der passen könnte. Wenn das nicht deiner ist, dann viel Glück. > Da dort aber keine Anzahl steht müsste es doch 0 sein? Bei Intel wäre das dann 1. Raten ist eben ungünstig. > Bei 8 Bit kommt nach 2er Komplement 0xFF raus bei 13 - 14. Und im 2er > Komplement entsprich das ja -1. Prima. > Wenn man davon den Betrag berechnet per > Einerkomblement + 0b01 bekommt man 1, sprich Betrag ausrechnen. Und weshalb sollte man das tun?
:
Bearbeitet durch User
Okay habe mal nachgeguckt Prozessor ist AVR. "Rotiere, rechts über Carry" habe ich gefunden. Das heißt die 1 vom Carry wird das höchste Bit, die 1 aus dem Register kommt ins Carry und im Register bleibt 0x80. Und wenn ich das richtig sehe lässt man also negative Zahlen im 2er Komplement stehen und setzt das N Flag.
Max M. schrieb: > Okay habe mal nachgeguckt Prozessor ist AVR. "Rotiere, rechts über > Carry" habe ich gefunden. Das heißt die 1 vom Carry wird das höchste > Bit, die 1 aus dem Register kommt ins Carry und im Register bleibt 0x80. Na also, geht doch. > Und wenn ich das richtig sehe lässt man also negative Zahlen im 2er > Komplement stehen und setzt das N Flag. Das N Bit entspricht üblicherweise dem Bit 7 vom Ergebnis. Ob man das Ergebnis als negativ sieht oder nicht, das hängt davon ab, mit welchem Zahlenraum man arbeitet. Geht es um Zahlen ohne Vorzeichen, dann ist 0xFF=255 positiv, aber N trotzdem gesetzt.
Georg A. schrieb: >> Da dort aber keine Anzahl steht müsste es doch 0 sein? > > Na dann wäre der Befehl ja maximal sinnlos... Schon, aber das kann es dennoch geben, besonders als Nebeneffekt eines Befehls mit variabler Anzahl. Besonders fies sind die Flags bei x86, wenn die Anzahl Bits 0 ist. Fies ist das weniger von der Arbeitsweise einer 8088 CPU her, als ganz vertrackt fies für die armen Schweine, die sowas heute in Silizium giessen sollen.
:
Bearbeitet durch User
A. K. schrieb: > Schon, aber das kann es dennoch geben, besonders als Nebeneffekt eines > Befehls mit variabler Anzahl. Ja schon, aber in dem Fall ohne extra Parameter wäre ein ROR mit Default-Schiebeanzahl 0 nicht wirklich der Bringer...
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.