;calculam ar[0]-ar[1]+ar[2]-... 
;unde ar este un array dat ca variabila globala
includelib libcmt.lib
includelib legacy_stdio_definitions.lib
printf proto
scanf proto
.data
ar sqword 1,2,3,4,5
dim sqword 5
sum sqword ?
print_format byte "sum=%lld",0ah,0
.code
main proc
;rax va contine suma alternata
;rcx va fi indicele curent
;rdx va contine paritatea indicelui 
lea rbx,ar
mov rax,0
mov rcx,0
;while (rcx<dim) { rax = rax +/- ar[rcx], dupa paritatea rcx}
begin_loop:
cmp rcx,dim
je exit_loop;  cand rcx=dim iesim din bucla
;testam paritatea lui rcx
mov rdx,rcx
and rdx,1; rdx:=rcx & 1 =rcx mod 2
;rax = rax+ ar[rcx] daca rdx=0
;rax = rax- ar[rcx] daca rdx=1
cmp rdx,0 
jne branch_else  
add rax,[rbx+rcx*8]
jmp end_branch
branch_else:
sub rax,[rbx+rcx*8]
end_branch:
;incrementam rcx si reluam ciclul
inc rcx
jmp begin_loop
exit_loop:
;afisam suma
sub rsp,40
lea rcx,print_format
mov rdx,rax
call printf
add rsp,40
ret
main endp
end

