Addition 16bit Zahlen mit Vorzeichen

Gast #106200
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.
Gast #106201
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
Gast #106202
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.
Gast #106203
-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
Gast #106204
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.
Gast #106205
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
Gast #106206
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!!!!
Gast #106207
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 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.