Forum: Mikrocontroller und Digitale Elektronik Division durch 2 mit Vorzeichen


von Peter (Gast)


Lesenswert?

Hallo,

wenn ich eine Zahl im zweierkomplement vorliegen habe und sie durch 2
teilen will, dann muss ich doch vor dem rechtsshift beachten ob die
Zahl positiv oder negativ ist und das carry entsprechend setzen?!?

Stimmt meine Annahme so?

Danke für tips!

GRUß,

Peter.

von Oliver Rogasch (Gast)


Lesenswert?

Wenn ich mich recht entsinne, dann musst du das nicht beachten, sondern
nach dem Verschieben dein MSB-1 in das MSB kopieren.

Gruß

Oliver

von Ingo Henze (Gast)


Lesenswert?

Im AVR-Assembler gibt es extra dafür einen Befehl:

ASR - Arithmetic Shift Right

Hier wird das MSB einfach so belassen, wie es ist.

Bei anderen Prozessoren/Mikrocontrollern gibt es was Ähnliches
möglicherweise auch.

Gruß
Ingo

von Peter (Gast)


Lesenswert?

Hallo Oliver,

erstmal Danke für die schnelle Antwort!

Ich denke wir meinen das gleiche. Ich hätte das MSB in das Carry
kopiert und dann den rechtsshift ausgeführt. Das carry wird dann zum
MSB. Kommt aufs gleiche raus so wie ich das sehe.

Gruß,

Peter.

von Peter (Gast)


Lesenswert?

Hallo Ingo,

ebenfalls Danke für die Antwort!

ich "muss" leider auf einem 8051-Derivat programmieren. so einen
luxuriösen Befehl habe ich leider nicht    :-(


Trotzdem Danke!

Gruß,

Peter.

von Peter D. (peda)


Lesenswert?

MOV C, ACC.7
RRC A

Dafür hat der 8051 andere "luxuriöse" Befehle (z.B. CPL Portpin,
DJNZ).


Peter

von Ingo Henze (Gast)


Lesenswert?

Schade, mußt Du es halt doch "zu Fuß" machen.

Hab mal grad so aus interesse nachgesehen, es gibt sowas auch schon bei
älteren Prozessoren :-)

Z80: SRA (Shift right arithmetical)
x86: SAR (Sift arithmetic right)

Wäre eventuell auch hilfreich, bei Fragen zumindest den
Prozessor-/Mikrocontrollertyp immer mit anzugeben.

Gruß
Ingo

von Michael (Gast)


Lesenswert?

Teil doch einfach einmal -1 durch 2 und sieh Dir das Ergebnis an:
schieben reicht nicht. Runden sollte man zuvor auch noch !

von Peter D. (peda)


Lesenswert?

MOV C, ACC.7
ADDC A, #0
MOV C, ACC.7
RRC A


Peter

von Peter (Gast)


Lesenswert?

Hallo Peter,

klar, stimmt schon. der 8051 kann dafür anderes "besser".

habe leider den Sinn des letzten Beitrages von Dir nicht so ganz
verstanden. könntest du bitte erklären was du meinst? wo liegt hier der
Trick?


Danke!!

Gruß,

Peter.

von Peter D. (peda)


Lesenswert?

Bezieht sich auf Michaels Post.

Bein negativen Werten mußt Du noch 1 addieren, damit die Division
stimmt.
Sonst ist: -1 / 2 = -1


Peter

von Peter (Gast)


Lesenswert?

Hallo Peter,hallo Michael,

vielen vielen Dank für den tipp!!! Da wäre ich sehr wahrscheinlich
reingefallen und hätte ewig nach Fehlern gesucht!!

Jetzt klappt es so wie es soll!


Danke!!!


Peter

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.