# Mittelwertberechnung per Assembler/Win CPU



## cArNi (17. November 2003)

Aufgabe:

Eingabe:
Beliebig viele positive Zahlen, die ab einer festen Adresse im Speicher stehen.

Ausgabe:
Wert1 + Wert2 + Wert3 + ....... + WertN 
                                 N


Bin da noch Nub drin, vielleicht hilft mir einer mal aus.


----------



## Frankdfe (19. November 2003)

Hallo!

An Adresse liste stehen die Werte(hier 20 Werte)


```
MOV BX, liste
MOV CX,0
MOV AX,0 ;AX enthält die Summe

marke:
MOV DX, [BX]
ADD AX, DX 
INC BX ; Gehe zum nächsten Wert
INC CX
CMP CX,20
JNZ marke ; Wiederhole die Schritte 20 mal

DIV CX ; AX=AX/20
```

Ich hab das nicht getestet, aber im groben sollte das Funktionieren

Gruß Frank


----------



## chibisuke (19. November 2003)

also da läst sich noch einiges verbessern... ;-) ersten solltest du 32bit register benutzen, dann verhinderst du das überlaufen beim addieren... des weiteren muss im pmode ein pointer 32bit haben.... da windows gefragt was ist das zu beachten 
Außerdem verarbeitet das progy so wie es is immer jeden wert doppelt...als low und als highbyte... also sollten wir für int werte wohl nicht 1 sondern 4 zum pointer addieren, nun ist es noch eine gute idee die anzahl der elemente nicht statisch festzuschreiben sondern sie in einem register zu übergeben und den wert decrementieren bis er null ist. für den pointer würd ich SI, den SourceIndexPointer benutzen....
Außerdem sollte ein mov ---, 0 möglicht vermieden werden, da es CPUs gibt die dies nicht unstützen... zum löschen eines registers sollte daher besser ein xor durchgeführt werden...
xor eax, eax setzt das eax register auf null, und das zuverlässiger als ein mov...
des weiteren sieht es optisch besser aus wenn du die befehle klein schreibst finde ich...


> mov si, liste
> mov ecx, 20
> 
> xor eax, eax
> ...


----------

