Arithmetische Befehle

OP #4906708
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
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. ;-)
OP
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?
OP
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.

Antwort schreiben

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.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.