Forum: Mikrocontroller und Digitale Elektronik Addition 16bit Zahlen mit Vorzeichen


von Peter (Gast)


Lesenswert?

Hallo,

ich möchte/muss in meinem Assemblerprogramm für einen 8bit
Mikrocontroller zwei 16bit Werte mit Vorzeichen addieren. Der
Wertebereich von -32000 bis + 32000 reicht dann völlig aus.

Wie stelle ich aber nun das Vorzeichen geeignet dar
(Zweierkomplement?!? )und wie addiere ich dann richtig?

Würde mich sehr über Hilfe freuen!!

Danke und Gruß,

Peter.

von crazy horse (Gast)


Lesenswert?

Zweierkomplement, klar.
Die Addition selbst ist denkbar einfach:
Operand1 r1,r2
Operand2 r3,r4
Ergebnis r1,r2

add r1,r3  //low
adc r2,r4  //high

von Peter (Gast)


Lesenswert?

Hallo,

erstmal danke für die Antwort!

Ich verstehe die Addition leider nicht. wie sehen denn die register
binär aus? ich habe mal versucht mit der angegebenen Addition dezimal
-1 und dezimal +1 zu addieren. Sollte dann ja 0 rauskommen. Da komme
ich aber nicht hin.

Wo steckt der Fehler??

Danke nochmals,

Peter.

von Alex (Gast)


Lesenswert?

-1 im Zweierkomplement:
1111111111111111
+1 normal:
0000000000000001

Also das seh ich so, dass wenn man die beiden Zahlen addiert, Null am
Ende rauskommen muss.
Hast du nen Plan, wie ne binäre Addition funktioniert?
Wie hast du die Sache versucht?

Gruss, Alex

von Peter (Gast)


Lesenswert?

Hallo Alex,

beim Zweierkomplement gibt doch das höchstwertige bit das vorzeichen
an, oder nicht?

-1 wäre demnach:

1000000000000001

+1 klar:

0000000000000001

addiert wie beschrieben kommt da nicht Null raus!

das Einerkomplement wäre 0xFFFF - 1 , also binär:

1111111111111110

die +1 immer noch:

0000000000000001

nach Addition kommt jetzt Null raus! hier würde die angegebene Addition
stimmen.

Soweit mein Kenntnisstand.

Gruß,

Peter.

von crazy horse (Gast)


Lesenswert?

Alex Antwort nicht gelesen? Oder nicht verstanden?
-1 als Zweierkomplement:
0b1111111111111111.
am höchsten Bit kann man zwar erkennen, ob es sich um eine positive
oder eine negative Zahl handelt, aber das heisst ja nicht, dass in den
verbleibenden 15bit der Betrag der Zahl steht (könnte man theoretisch
so machen, würde aber die MCs und/oder die Software unnötig
verkomplizieren. Mit Zweierkomplement ist das alles gar kein Ding:
0b1111111111111111 -1
0b0000000000000001  1
------------------
0b0000000000000000

von Peter (Gast)


Lesenswert?

Aha, dann habe ich das Zweierkomplement nicht verstanden. Die Addition
ist schon klar. Stimmt schon.


Wie ist das Zweierkomplement definiert? Wie bilde ich es?

was ist z.b. dezimal -3 im Zweierkomplement?

Ich bitte nochmals um Hilfe!!

DANKE!!!!

von crazy horse (Gast)


Lesenswert?

logisch: grösste darstellbare Zahl (bei 16bit: 65535) +1 - Betrag der
Zahl
also -3: 65536 -3=65533=0xfffd=0b1111111111111101
falls du es mal in einem Programm machen willst:
alle Bits invertieren und eine 1 addieren.
Praktisch: dich gar nicht drum kümmern und den Assembler/Compiler die
Umrechnung überlassen.

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.