Ööö...
Más assembly-ben programoztam, amikor még ezt tanultam, szóval most kicsit utána olvastam, és hátha segít, amit eddig elolvastam.
1.) Indirekt címzés. Olyan, mint a pointer. Egy tömbben nem tudod, hogy mi van, ezért az értékét nem tudod megadni, viszont tudod, hogy hol van, ezért a címét adod meg.
A hozzáadás, szorzás, kivonás pedig a mutatót mozgatja.
https://www.tutorialspoint.com/assembly_programming/assembly_loops.htm
2.) Meglepő módon a loop a ciklus, és ebből a három sorból áll az első esetben:
_loop:
add eax, [array + ecx*4 - 4]
loop _loop
Ennek az első sora egy címke, ahova ugrani lehet, és ezt is adja meg a 3. sorban, hogy oda térjen vissza. A loop parancs maga (tehát a 3. sor első szava) úgy működik, hogy addig ugrik vissza a _loop-ra, amíg az ecx nem nulla, és minden egyes lépsében csökkenti az értékét.
Az add pedig elvégzi az array tartalmának összeadását. A kapcsos zárójelben az array-t azért írjuk oda, mert az a tömb első elemére mutat. Az összeadást pedig hátulról előre végzi. Mivel az értékek 4 byte-onként vannak (legalábbis ez a feltételezésem, azt megtaláltam, hogy 4-enként vannak az adatok, de hogy tényleg azért mert 4 byte-okról, azaz 32 bitekről beszélünk, azt már nem tudom), ezért az ecx*4 pont a tömbön túlra mutat, ezért vonunk ki egyszer 4-et. Ezután csökken a loop miatt az ecx értéke, ekkor már az 5. értékre mutat az ecx*4, viszont azt márhozzáadtuk az előbb, ezért megint kivonunk 4-et. És így tovább.
http://www.cs.virginia.edu/~evans/cs216/guides/x86.html
3.) Az okot szintén nem találtam. Viszont 0-ra kell állítani az eax-t, és ez a leggyorsabb parancs hozzá.
https://stackoverflow.com/questions/1396527/what-is-the-purpose-of-xoring-a-register-with-itself
4.) Hasonlóan a loop-hoz itt is egy elnevezett területre hivatkozunk, még pedig a call paranccsal: call sum. Az sum-ot korábban, még a main előtt meghatároztuk, és a ret (return) parancsnál tér vissza.
A függvénnyel kapcsolatban ennél sokkal konkrétabb dolgot nem nagyon tudok mondani. A loop maga hasonlóan működik, mint az előző esetben, viszont az array nélkül. Ahhoz, hogy ezt meg tudjam magyarázni, ismernem kellene a registerek kiosztását, mivel úgy néz ki, hogy oda navigálja a 'pointer'-t, ahol az adatok kezdődhetnek. Ez persze szintén egy feltételezés, de ebből ne mtudom megmondani.
Remélem valamennyire segítettem.