Forum: Mikrocontroller und Digitale Elektronik Statusbits einer ALU (Arithmetic Logic Unit)


von Johann M (Gast)


Lesenswert?

Hallo!

Ich beschäftige mich gerade mit der ALU (Arithmetic Logic Unit).
Nun bin ich auf folgende Frage gestoßen:
Durch welche logischen Schaltungen werden die Statusbits N 
(Negative,gesetzt, wenn Ergebnis negativ), C (Carry gesetzt, wenn 
Übertrag nach Addition), Z (Zero=gesetzt, wenn Ergebnis 0) und V 
(Overflow, gesetzt, wenn bei Addition ein Überlauf entsteht).

Ich habe mir bisher folgendes ausgedacht.

Zero: einfach einen Inverter vom Ausgang weg

Carry: Bsp. Halb-/Volladdierer => logische UND-Verknüpfung von A und B

Overflow: carry n und carry n-1 mit Exor vergleichen.

Negative: eine Ahnung?

Bitte um Hilfe!

von (prx) A. K. (prx)


Lesenswert?

Johann M schrieb:

> Ich habe mir bisher folgendes ausgedacht.

Üblicherweise haben ALUs mehr als 1 Bit.

> Negative: eine Ahnung?

Weshalb du hier auf die Nase fällst.

von Johann M (Gast)


Lesenswert?

Ich will mich hier aber nur mit einer 1-bit-Alu beschäftigen, mehr 
nicht.
Mir ist sehr wohl klar, dass eine normale Alu weit, weit größer ist, 
aber um das geht es mir nicht.

von Peter D. (peda)


Lesenswert?

Die Bits im Statusregister einer CPU sind üblicher Weise im 
dazugehörenden Datenblatt bzw. der Befehlsbeschreibung genau erklärt.


Peter

von (prx) A. K. (prx)


Lesenswert?

Johann M schrieb:

> Ich will mich hier aber nur mit einer 1-bit-Alu beschäftigen, mehr
> nicht.

Wie willst du dann eine negative Zahl von einer positiven Zahl 
unterscheiden (betrifft N und V)?

von spess53 (Gast)


Lesenswert?

Hi

>C (Carry gesetzt, wenn Übertrag nach Addition)

Wird im allgemeinen auch bei Subtraktion gesetzt.

Hast du die ALU eine konkreten Controllers im Auge? Es gibt da durchaus 
Unterschiede.

MfG Spess

von MaWin (Gast)


Lesenswert?

Ausser

> Zero: einfach einen Inverter vom Ausgang weg

fallen alle anderen Informationen direkt aus dem Rechenwerk an jeweils 
einer eigenen Leitung an, die Signale müssen nur, wie das Ergebnis, 
gespeichert werden.

Du hast bei zero bei einer 1 bit ALU noch Glück, normalerweise braucht 
es ein <n> bit NOR Gatter dafür.

von (prx) A. K. (prx)


Lesenswert?

spess53 schrieb:

>>C (Carry gesetzt, wenn Übertrag nach Addition)
> Wird im allgemeinen auch bei Subtraktion gesetzt.

Fragt sich nur wie. Gibt da 2 Konventionen - einerseits aus einer echten 
Subtraktion, andererseits aus der Addition des Einerkomplements (6502, 
ARM).

von spess53 (Gast)


Lesenswert?

Hi

>Fragt sich nur wie. Gibt da 2 Konventionen - einerseits aus einer echten
>Subtraktion, andererseits aus der Addition des Einerkomplements (6502,
>ARM).

Bei AVRs ist das so definiert:

SUB Rd,Rr (->R)

C: Rd7• Rr7 +Rr7 •R7 +R7• Rd7

Set if the absolute value of the contents of Rr is larger than the 
absolute value of Rd; cleared otherwise.

MfG Spess

von spess53 (Gast)


Lesenswert?

Hi

Da ist beim Kopieren etwas verloren gegangen:

Rd7• Rr7 +Rr7 •R7 +R7• Rd7 -> /Rd7• Rr7 +Rr7 •R7 +R7• /Rd7

MfG Spess

von (prx) A. K. (prx)


Lesenswert?

Tip: In [code] einbetten.

von spess53 (Gast)


Lesenswert?

Hi

>Tip: In [code] einbetten.

OK danke. Das nächste mal.

MfG Spess

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.