Mittelwertbildung aus 10 Werten im Ram Mega16

Persönliche Seite #817129
Lesenswert?
• ▲
▼
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.
#817130
Lesenswert?
• ▲
▼
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 :-)
#817278
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren