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.
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
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.
-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
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.
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
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!!!!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.