; funx ; , function to find and return the minimum, maximum, sum, medians, and average of an array ; ; High-Level Language (HLL) call for C/C++ ; ; stats2(arr, len, min, med1, med2, max, sum, ave); ; Arguments: ; arr, address – rdi ; len, dword value – esi ; min, address – rdx ; med1, address - rcx ; med2, address - r8 ; max, address - r9 ; sum, address – stack (rbp+16) ; ave, address – stack (rbp+24) global stats2 ;static function (leaf) stats2: push rbp mov rbp, rsp rbp, rsp push r12 ; ; Get min and max mov eax, dword [rdi] ; get min mov dword [rdx], eax ; return min mov r12, rsi ; get len dec r12 ; set len-1 mov eax, dword [rdi+r12*4] ; get max mov dword [r9], eax ; return max ; ; Get medians mov rax, rsi mov rdx, 0 mov r12, 2 div r12 ; rax = length/2 cmp rdx, 0 ; even/odd length? je evenLength mov r12d, dword [rdi+rax*4] ; get arr[len/2] mov dword [rcx], r12d ; return med1 mov dword [r8], r12d ; return med2 jmp medDone evenLength: mov r12d, dword [rdi+rax*4] ; get arr[len/2] mov dword [r8], r12d ; return med2 dec rax mov r12d, dword [rdi+rax*4] ; get arr[len/2-1] mov dword [rcx], r12d ; return med1 medDone: ; find sum mov r12, 0 ; counter/index mov rax, 0 ; running sum sumLoop: add eax, dword [rdi+r12*4] ; sum += arr[i] inc r12 cmp r12, rsi jl sumLoop ; Calculate average cdq idiv rsi ; average = sum/len mov r12, qword [rbp+24] ; get average address mov dword [r12], eax ; return average pop r12 pop rbp ret