Hallo, ich möchte gern aus 10 Werten die Im Ram des Controllers stehen auslesen und den Mittelwert des Ganzen bilden. Gibt es da im Assembler Lösungsansätzte? Mittelwert = Wert von (1+10) / Anzahl
Müssen es wirklich 10 Werte sein? Mit 8 oder 16 wäre es trivial...
Können es auch 8 oder 16 Werte sein? Das wäre wohl einfacher. Was meinst du mit Lösungsansätze? Jeden Wert holen und zu einem Register hinzuaddieren. Am Ende dann durch 10 teilen. Das Teile wird nicht einfach, aber dazu googlen. Wenn du wie oben gesagt jedoch auf 8 oder 16 Werte kämst, würde sich ein 3 oder 4facher Shift Right anbieten.
René wrote: > Hallo, > > ich möchte gern aus 10 Werten die Im Ram des Controllers stehen auslesen > und den Mittelwert des Ganzen bilden. > Gibt es da im Assembler Lösungsansätzte? Das würde ich straight forward machen. Je nachdem, wie gross die Zahlen sind, entsprechend viele Register für die Summe bereitstellen und darin die einzelnen Werte aufsummieren. Bei Byte-Werten, reicht es aus, wenn in 16 Bit summiert wird, also 2 Register. Ansonsten wirst du wohl mit 24 Bit Arithmetik arbeiten müssen. Ist aber zumindest im Bereich des Aufsummierens kein Problem. Aus dem Fundus an Routinen eine Divisionsroutine hervorgekramt (16/8 oder 32/8, 24/8 haben wohl die wenigsten vorrätig) und durch 10 dividieren. PS: Ich würde mir auch überlegen, ob es unbedingt 10 Werte sein müssen, oder ob nicht 8 oder 16 auch gehen würden. Denn dann wäre die Division einfacher :-)
Hallo, können aus 8 oder 16 sein 16 ist sogar noch besser.
René wrote:
> können aus 8 oder 16 sein 16 ist sogar noch besser.
Also, wo genau liegt das Problem?
also alles aufaddieren maximal also 8 * 256 = 2048 da Reicht also eine 16 Bit addition und dann 3 mal lsr ror hintereinander. meint Ihr das so? Mfg René
René wrote: > also alles aufaddieren > > maximal also 8 * 256 = 2048 da Reicht also eine 16 Bit addition und dann > 3 mal lsr ror hintereinander. Zum Beispiel. Bei 16 Werten dann einmal mehr schieben...
René wrote: > Hallo, > > ich möchte gern aus 10 Werten die Im Ram des Controllers stehen auslesen > und den Mittelwert des Ganzen bilden. > Gibt es da im Assembler Lösungsansätzte? > > Mittelwert = Wert von (1+10) / Anzahl Du kannst durch bekannte Konstanten (=10) auch mit festen shifts+add dividieren. Siehe hier: http://www.cs.uiowa.edu/~jones/bcd/divide.html Seine Beispiele sind in C, lassen sich aber spielend in Assembler übertragen.
Mit noch weniger Aufwand, speziell wenn's schnell gehen muss : http://www.ibrtses.com/embedded/exponential.html
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.