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. ;-)
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?
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.
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...
Eine eigene Frage?
Dieser Thread ist über 9 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.