Arithmetische Befehle

OP #4906708
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
Angehängte Dateien:
OP #4906969
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.
OP #4907020
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.
#4907037
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?
#4907038
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?
OP #4907049
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.
#4907054
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.
#4907064
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren