public SUMA assume cs:_TEXT _TEXT segment extrn TIPARESTE:near ; function suma(var t:tablou; i:integer):integer; SUMA: push bp mov bp, sp sub sp, 4 ; Parametrii: ; bp+0 -> bp salvat ; bp+2 -> adr. revenire ; bp+4 -> n ; bp+6 -> @t ; Var. locale: ; bp-2 -> indexul elementului curent (i) ; bp-4 -> suma partiala (s) mov ax, 0 mov word ptr ss:[bp-4], ax ; s := 0 mov word ptr ss:[bp-2], ax ; i := 0 jmp test_bucla bucla: ; adunam elementul curent la suma partiala mov si, word ptr ss:[bp-2] ; si := i shl si, 1 les bx, dword ptr ss:[bp+6] ; es:bx = @t mov ax, word ptr es:[bx+si] ; ax := t[i] add word ptr ss:[bp-4], ax ; tiparim elementul curent push ax call TIPARESTE ; trecem la elementul urmator mov ax, word ptr ss:[bp-2] ; ax := i inc ax mov word ptr ss:[bp-2], ax test_bucla: ; testam daca mai avem elemente in sir; aici ax=i cmp ax, word ptr ss:[bp+4] ; cmp i, n jb bucla ; punem valoare de returnat in ax si revenim la apelant mov ax, word ptr ss:[bp-4] mov sp, bp pop bp retn 6 _TEXT ends end