Hallo.. Ich möchte gern eine 16Bit Zahl mit 2 multiplizieren. Bei 8Bit ist dies ja mit einem Linksshift erledigt aber bei 16Bit will es nicht funktionieren. Habe versucht erst das Register mit den 8 niederen Bits nach links zu schieben. Vorher hatte ich das Carry Bit gelöscht und nach dem linksshift das Carry gelesen. Wenn ein überlauf stattgefunden dann habe ich das Register mit den 8 höherwertigen Bits incrementiert und danach ebenfalls einen linksshift ausgeführt. Leider kommt als Ergebnis nur quatsch raus.. ist es überhaupt möglich bei 16Bit werten mit dieses einfache verfahren anzuwenden ? Ach ja.. Ich sollte noch dazu sagen, das ich den Wertebereich nicht voll ausnutze und es zu keinem Überlauf kommen kann. Die werte die mit 2 multiplizieren will liegen im bereich von 0 - 2000.
AFAIK solltest du die höheren 8Bit erst shiften und dann inkrementieren, auch wenn es dafür sicher einen Spezial Assembler-Befehl (rotate w/ carry) gibt. Ich progge fast nur C, also bin ich da überfragt, aber andere Architekturen haben sowas auch. - cl
Also ich denke mal, der Befehl den Du brauchst ist ROL. Aber legt mich nicht drauf fest. Siehe auch http://www.atmel.com/dyn/resources/prod_documents/DOC0856.PDF
Na klar add kann ich ja auch benutzen...hätt ich ja auch selbst drauf kommen müssen...Also danke an alle... Aber eine Frage hätte ich da noch und zwar zu der Antwort von Hartmut. Er schreibt das man zuerst das lowregister linksschieben soll und danach das highregister nach rechts.. Warum nach rechts???
Wieso nach rechts? ROL rotiert doch nach Links ebenso wie LSL nach links shifted. Ich glaube, Du bist von den Mnemonics verwirrt :)
Wo schreibt er das? Ich sehe nur: lsl lowregister ; linksschieben rol highregister ; linksrotieren mit carry
Ja Ok...Ich bin völlig raus.. Hab da grad was völlig durcheinander gebracht..
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.