Forum: Offtopic Arithmetische Befehle


von Max M. (justabeginner)


Angehängte Dateien:

Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

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?

von Max M. (justabeginner)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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.

von Stefan E. (sternst)


Lesenswert?

Max M. schrieb:
> ups ja also beim 4. dann 0 und Zero Flag setzen.

Nein.

von Max M. (justabeginner)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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
von (prx) A. K. (prx)


Lesenswert?

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?

von Max M. (justabeginner)


Lesenswert?

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.

von Georg A. (georga)


Lesenswert?

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?

von (prx) A. K. (prx)


Lesenswert?

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
von Max M. (justabeginner)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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
von Georg A. (georga)


Lesenswert?

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...

von Max M. (justabeginner)


Lesenswert?

Okay, Danke für die Hilfe :)

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
Noch kein Account? Hier anmelden.