; Jade Yu Cheng ; ICS 312 ; Assignment 7 Exercise 1 ; April 24, 2009 ; This program takes one command-line argument, which should be a floating ; point number. The program then calls a function called compute_exp that ; computes the exponential function. %include "asm_io.inc" %define x dword [ebp + 8] ; define x to be the argument segment .bss counter resq 1 ; a buffer space segment .text global compute_exp compute_exp: push ebp ; setup mov ebp, esp ; setup push ebx ; setup reserve ebx fld1 ; st0 is the previous x^n/n! fld1 ; st1 is the previous summation mov ebx, 0 ; loop counter add_loop: cmp ebx, 40 ; loop 40 times jz add_loop_end inc ebx ; increment the loop counter fxch st1 ; first work on updating x^n/n fmul dword x ; x^(n-1)/(n-1) * x = x^n/(n-1) mov [counter], ebx fidiv dword [counter] ; (x^n/(n-1))/n = x^n/n fxch st1 ; then work on updating the summation fadd st1 ; add the new item x^n/n jmp add_loop add_loop_end: pop ebx ; clean up mov esp, ebp ; clean up pop ebp ; clean up ret ; clean up