daily pastebin goal
54%
SHARE
TWEET

Untitled

a guest May 16th, 2018 90 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .bss
  2. # zmienne
  3. .comm prec, 8
  4. .comm begin, 4
  5. .comm end, 4
  6. .comm suma, 4
  7. .comm _dx, 4
  8.  
  9. .comm x, 4
  10.  
  11. .comm xp, 4
  12. .comm i, 4
  13. .comm dx, 4
  14.  
  15. .comm result, 4
  16.  
  17. .data
  18.  
  19. two: .long 2
  20. cztery: .long 4
  21.  
  22. .moj:
  23. .string "wynik calkowania %f \n"
  24.  
  25. .text
  26. .global calka
  27.  
  28. .type calka, @function
  29.  
  30. calka:
  31. pushq %rbp
  32. movq %rsp, %rbp
  33.  
  34. #################################################
  35. # Do funkcji sa przekazywane 3 parametry        #
  36. # Pierwszy arg to dokladnosc w %rsi             #
  37. # Drugi to poczatek przedzialu calkowania %xmm0 #
  38. # Trzeci to koniec przedzialu calkowania %xmm1  #
  39. #################################################
  40.  
  41. #################################################
  42. # Pierwszym krokiem algorytmu jest wyznaczenie  #
  43. # szerokosci prostokata dx:                     #
  44. # dx = (xk - xp)/n                              #
  45. #################################################
  46.  
  47.      
  48.          movq   %rdi, prec  #pobranie precyzji
  49.          movss %xmm0, begin      #pobranie dolnej granicy
  50.          movss %xmm1, end        #pobranie gornej granicy
  51.  
  52.         flds end        #xk
  53.         fsub begin      #(xk - xp)
  54.         fidiv prec      #((xk - xp)/n
  55.  
  56.         fstps _dx       #pobranie wyliczonego przedzialu
  57.  
  58.     movss x1, %xmm0
  59.     movss %xmm0, begin
  60.  
  61.     fldz    #zero do st(0) tutaj przechowuje sume wszystkich wysokosci
  62.  
  63.         PETLA:
  64.                 movss begin, %xmm0      #pierwszy argument dla make_x
  65.                                 #drugi argument jest w %rdi
  66.                 movss _dx, %xmm1        #trzeci argument
  67.  
  68.        
  69.         movq %rdi, prec    
  70.         movss %xmm0, xp
  71.         movss %xmm1, dx
  72.  
  73.         fild prec       # i// Convert the integer operand (signed)
  74.                 # into extended-real and load it onto the floating-point stack.
  75.         fmul dx # i*dx
  76.         fadd xp # xp + i*dx
  77.  
  78.         fstps result
  79.         movss result, %xmm0     #pobranie wyniku               
  80.  
  81.                 #w %xmm0 jest jest obliczony x dla ktorego policzymy teraz f(x)
  82.  
  83.         movss %xmm0, x  # pobranie wartosci do zmiennej x
  84.         flds x
  85.         fmul x
  86.  
  87.         fisub two      #odejmuje 2.0
  88.         fstp result    #pobranie wyniku
  89.  
  90.                 fadd result     # w result trzymam wynik f(x) (wysokosc prostokata)
  91.                         #dodanie to do pozostalych wczesniej obliczonych
  92.                     #(na szczyt stosu wysokosci prostokata)
  93.      
  94.  
  95.                 dec %rdi        #dekrementuje licznik
  96.                 cmp $0, %rdi    #jesli 0 to konczymy prace
  97.                 je END
  98.                 jmp PETLA
  99.  
  100.         END:    # wynik = _dx(czyli szerekosc)*(f(x1)+f(x2)+f(x3)...f(xn)) (w st(0) jest wysokosc)
  101.                
  102.         fmul _dx
  103.                 fstps result    #wynik calkowania
  104.  
  105.         #WYWOLANIE PRINTFA
  106.  
  107.                 movss result, %xmm0
  108.         cvtss2sd %xmm0, %xmm0
  109.         mov $.moj, %edi
  110.         mov $1,%eax
  111.         call printf
  112.  
  113.         #####################
  114.         #przekazuje wynik calkowania do xmm0 aby zwrocic wynik do C
  115.         #movss result, %xmm0
  116.  
  117.                 movq %rbp, %rsp
  118.                 popq %rbp
  119.                 ret
RAW Paste Data
Top